Reetrantlock的公平非公平原理解析
2018-03-12 11:53
204 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。 http://blog.csdn.net/zmx729618/article/details/51593666 在Java的ReentrantLock构造函数中提供了两种锁:创建公平锁和非公平锁(默认)。代码如下:public ReentrantLock() { sync = new NonfairSync();} public ReentrantLock(boolean fair) {
sync = fair ? new FairSync() : new NonfairSync();
}在公平的锁上,线程按照他们发出请求的顺序获取锁,但在非公平锁上,则允许‘插队’:当一个线程请求非公平锁时,如果在发出请求的同时该锁变成可用状态,那么这个线程会跳过队列中所有的等待线程而获得锁。 非公平的ReentrantLock 并不提倡 插队行为,但是无法防止某个线程在合适的时候进行插队。在公平的锁中,如果有另一个线程持有锁或者有其他线程在等待队列中等待这个所,那么新发出的请求的线程将被放入到队列中。而非公平锁上,只有当锁被某个线程持有时,新发出请求的线程才会被放入队列中。非公平锁性能高于公平锁性能的原因:在恢复一个被挂起的线程与该线程真正运行之间存在着严重的延迟。假设线
990c
程A持有一个锁,并且线程B请求这个锁。由于锁被A持有,因此B将被挂起。当A释放锁时,B将被唤醒,因此B会再次尝试获取这个锁。与此同时,如果线程C也请求这个锁,那么C很可能会在B被完全唤醒之前获得、使用以及释放这个锁。这样就是一种双赢的局面:B获得锁的时刻并没有推迟,C更早的获得了锁,并且吞吐量也提高了。当持有锁的时间相对较长或者请求锁的平均时间间隔较长,应该使用公平锁。在这些情况下,插队带来的吞吐量提升(当锁处于可用状态时,线程却还处于被唤醒的过程中)可能不会出现。
sync = fair ? new FairSync() : new NonfairSync();
}在公平的锁上,线程按照他们发出请求的顺序获取锁,但在非公平锁上,则允许‘插队’:当一个线程请求非公平锁时,如果在发出请求的同时该锁变成可用状态,那么这个线程会跳过队列中所有的等待线程而获得锁。 非公平的ReentrantLock 并不提倡 插队行为,但是无法防止某个线程在合适的时候进行插队。在公平的锁中,如果有另一个线程持有锁或者有其他线程在等待队列中等待这个所,那么新发出的请求的线程将被放入到队列中。而非公平锁上,只有当锁被某个线程持有时,新发出请求的线程才会被放入队列中。非公平锁性能高于公平锁性能的原因:在恢复一个被挂起的线程与该线程真正运行之间存在着严重的延迟。假设线
990c
程A持有一个锁,并且线程B请求这个锁。由于锁被A持有,因此B将被挂起。当A释放锁时,B将被唤醒,因此B会再次尝试获取这个锁。与此同时,如果线程C也请求这个锁,那么C很可能会在B被完全唤醒之前获得、使用以及释放这个锁。这样就是一种双赢的局面:B获得锁的时刻并没有推迟,C更早的获得了锁,并且吞吐量也提高了。当持有锁的时间相对较长或者请求锁的平均时间间隔较长,应该使用公平锁。在这些情况下,插队带来的吞吐量提升(当锁处于可用状态时,线程却还处于被唤醒的过程中)可能不会出现。
相关文章推荐
- ReetrantLock源码解析(一):获得公平锁和非公平锁lock()
- java之ReentrantLock公平锁和非公平锁
- Java中ReentrantLock的公平锁和非公平锁
- 第五章 ReentrantLock源码解析1--获得非公平锁与公平锁lock()
- 第五章 ReentrantLock源码解析1--获得非公平锁与公平锁lock()
- Lock、ReentrantLock、ReentrantReadWriteLock原理及应用深入解析
- Java之ReentrantLock公平锁和非公平锁
- java多线程随手记——ReentrantLock的公平锁与非公平锁
- java并发库 Lock 公平锁和非公平锁
- synchronized与lock 对象锁、互斥锁、共享锁以及公平锁和非公平锁
- ReentrantReadWriteLock重入锁中的读写锁在公平和非公平模式下的资源抢占测验
- java多线程20 : ReentrantLock中的方法 ,公平锁和非公平锁
- [多线程_reentrantlock公平锁与非公平锁]
- java并发库 Lock 公平锁和非公平锁
- 深入剖析ReentrantLock公平锁与非公平锁源码实现
- java多线程:并发包中ReentrantLock锁的公平锁原理
- 【试验局】ReentrantLock中非公平锁与公平锁的性能测试
- 深入剖析基于并发AQS的(独占锁)重入锁(ReetrantLock)及其Condition实现原理
- ReentrantLock中公平锁与非公平锁的效率对比
- ReentrantLock的公平锁与非公平锁浅析