Java中的'synchronized'关键字可以是公平锁,也可以是非公平锁,具体取决于使用时是否指定了公平性参数。默认情况下,'synchronized'是非公平锁。非公平锁意味着当多个线程竞争锁时,释放锁后,锁会立即分配给等待队列中的某个线程,而不考虑其他线程的等待时间,这可能导致某些线程一直无法获取到锁。

'ReentrantLock'类可以通过构造函数参数决定是公平锁还是非公平锁。使用'ReentrantLock(true)'构造函数创建的实例是公平锁,而使用'ReentrantLock(false)'构造函数创建的实例是非公平锁。

'ReentrantLock'的公平性是通过使用'AQS'(AbstractQueuedSynchronizer)实现的。'AQS'是一个用于构建锁和同步器的框架,它可以实现公平性和非公平性。在公平锁模式下,'AQS'会按照线程的请求顺序分配锁,即先来先得。而在非公平锁模式下,'AQS'会优先给处于竞争状态的线程分配锁。

Java synchronized锁:公平与非公平,ReentrantLock详解

原文地址: https://www.cveoy.top/t/topic/paBF 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录