公平锁的获取和释放:

可以看到这个过程跟AQS独占锁的获取和释放是一样的,实现公平锁的关键是tryRelease方法的实现:

公平锁实现关键:
当有资源时也会判断当前有没有线程在等待,只要有线程在等待不管有没有资源都要排队等待,这就保证了线程完全是按先后顺序执行。
可重入实现细节:
同一个线程可以在没有资源情况下无限次获取锁,通过上图可以看到,在state不是0的情况下会判断当前线程是否是持锁线程,是的情况下会改变state的值并return true。此时要注意,同一个线程lock几次,也要unlock几次,不然会死锁。
非公平锁的获取和释放:

非公平锁有两次非公平的方式:
1.在刚调lock时会直接CAS尝试获取锁。
2.在nonfairTryAcquire方法中发现有资源的情况下会直接CAS尝试获取锁,而不会管等待队列中有没有其他线程在排队。
公平锁和非公平锁实现细节差异:
公平锁在有资源的情况下也会判断等待队列中是否有线程在等待,而非公平锁会有两次非公平获锁的机会,但如果失去这两次机会则也要乖乖的排队等候按时间顺序执行。
公平锁与非公平锁详解
本文深入解析公平锁和非公平锁的工作原理,重点阐述两者的获取与释放过程,以及可重入特性。对比公平锁与非公平锁在资源获取上的差异,探讨其在并发控制中的应用。
190

被折叠的 条评论
为什么被折叠?



