今天源源来给大家分享一些关于公平锁和非公平锁怎么实现方面的知识吧,希望大家会喜欢哦

公平锁和非公平锁 公平锁和非公平锁怎么实现公平锁和非公平锁 公平锁和非公平锁怎么实现


公平锁和非公平锁 公平锁和非公平锁怎么实现


公平锁和非公平锁 公平锁和非公平锁怎么实现


1、现在,可能你会对第四条处理感到疑惑。

2、不用着急,当分析完singnal方法的具体实现细节以后,你的疑惑将得到解决。

3、首先Ja中的ReentrantLock 默认的lock()方法采用的是非公平锁。

4、一个同步辅助类,允许一组线程相互等待,直到这组线程都到达某个公共屏障点。

5、该barrier在释放等待线程后可以重用,因此称为循环的barrier。

6、也就是不用考虑其他在排队的线程的感受,lock()的时候直接询问是否可以获取锁,而不用在队尾排队。

7、下面分析下公平锁的具体实现。

8、重点关注ja.util.concurrent.locks.AbstractQueuedSynchronizer类这个类提供了对作系统层面线程作方法的封装调用,可以帮助并发设计者设计出很多的APIReentrantLock当中的lock()方法,是通过static 内部类sync来进行锁作public void lock(){sync.lock();}//定义成final型的成员变量,在构造方法中进行初始化private final Sync sync;//无参数默认非公平锁public ReentrantLock(){sync = new NonfairSync();}//根据参数初始化为公平锁或者非公平锁public ReentrantLock(boolean fair){sync = fair ? new FairSync() : new NonfairSync();}。

本文到这结束,希望上面文章对大家有所帮助。