问题一:synchronized和ReentrantLock在实现原理上有什么不同?
synchronized和ReentrantLock在实现原理上有什么不同?
参考回答:
synchronized的实现涉及到锁的升级,具体为无锁、偏向锁、自旋锁、向OS申请重量级锁;而ReentrantLock则是通过利用CAS(CompareAndSwap)自旋机制保证线程操作的原子性和volatile保证数据可见性以实现锁的功能。
关于本问题的更多回答可点击原文查看:
https://developer.aliyun.com/ask/633977
问题二:synchronized和ReentrantLock在锁的释放上有何不同?
synchronized和ReentrantLock在锁的释放上有何不同?
参考回答:
synchronized不需要用户去手动释放锁,代码执行完后系统会自动让线程释放对锁的占用;而ReentrantLock则需要用户去手动释放锁,如果没有手动释放锁,就可能导致死锁现象。
关于本问题的更多回答可点击原文查看:
https://developer.aliyun.com/ask/633978
问题三:synchronized和ReentrantLock在锁的可中断性上有什么区别?
synchronized和ReentrantLock在锁的可中断性上有什么区别?
参考回答:
synchronized是不可中断类型的锁,除非加锁的代码中出现异常或正常执行完成;而ReentrantLock则可以中断,可通过trylock(long timeout, TimeUnit unit)设置超时方法或者将lockInterruptibly()放到代码块中,调用interrupt方法进行中断。
关于本问题的更多回答可点击原文查看:
https://developer.aliyun.com/ask/633979
问题四:ReentrantLock是否支持公平锁和非公平锁,并且它们之间有什么区别?
ReentrantLock是否支持公平锁和非公平锁,并且它们之间有什么区别?
参考回答:
ReentrantLock既支持公平锁也支持非公平锁。公平锁遵循FIFO(先进先出)原则,先到的线程会优先获取资源,适合大任务,但吞吐量会下降;非公平锁则是多个线程去获取锁时,会直接去尝试获取,获取不到再去等待队列,优点是可以减少CPU唤醒线程的开销,整体的吞吐效率会高点。
关于本问题的更多回答可点击原文查看:
https://developer.aliyun.com/ask/633980
问题五:公平锁效率低的原因是什么?
公平锁效率低的原因是什么?
参考回答:
公平锁效率低的原因在于它需要维护一个队列,后来的线程要加锁时,即使锁空闲,也要先检查有没有其他线程在等待,如果有,自己要挂起并加入队列,然后唤醒队列最前面的线程。这种情况下,相比较非公平锁多了一次挂起和唤醒的操作,增加了线程切换的开销。
关于本问题的更多回答可点击原文查看: