“J.U.C”:ReentrantLock之三unlock方法分析(r)
来源:互联网 发布:python if false 编辑:程序博客网 时间:2024/06/07 19:45
前篇博客LZ已经分析了ReentrantLock的lock()实现过程,我们了解到lock实现机制有公平锁和非公平锁,两者的主要区别在于公平锁要按照CLH队列等待获取锁,而非公平锁无视CLH队列直接获取锁。但是对于unlock()而已,它是不分为公平锁和非公平锁的。
release(1),尝试在当前锁的锁定计数(state)值上减1。成功返回true,否则返回false。当然在release()方法中不仅仅只是将state – 1这么简单,- 1之后还需要进行一番处理,如果-1之后的新state = 0 ,则表示当前锁已经被线程释放了,同时会唤醒线程等待队列中的下一个线程,当然该锁不一定就一定会把所有权交给下一个线程,能不能成功就看它是不是亲爹生的了(看运气)。
在release代码中有一段代码很重要:
对于这个LZ在前篇博客已经较为详细的阐述了。不懂或者忘记请再次翻阅:【Java并发编程实战】—–“J.U.C”:ReentrantLock之二lock方法分析
waitStatus!=0表明或者处于CANCEL状态,或者是置SIGNAL表示下一个线程在等待其唤醒。也就是说waitStatus不为零表示它的后继在等待唤醒。
unparkSuccessor()方法:
注:unlock最好放在finally中!!!!!!unlock最好放在finally中!!!!!! unlock最好放在finally中!!!!!! (重要的事说三遍)
参考文献:
1、Java多线程系列–“JUC锁”04之 公平锁(二)
0 0
- “J.U.C”:ReentrantLock之三unlock方法分析(r)
- “J.U.C”:ReentrantLock之三unlock方法分析
- 【Java并发编程实战】-----“J.U.C”:ReentrantLock之三unlock方法分析
- 【Java并发编程实战】-----“J.U.C”:ReentrantLock之三unlock方法分析
- 【Java并发编程实战】-----“J.U.C”:ReentrantLock之三unlock方法分析
- “J.U.C”:ReentrantLock之二lock方法分析 (r)
- “J.U.C”:ReentrantLock之二lock方法分析
- “J.U.C”:ReentrantLock之一简介 (r)
- 【Java并发编程实战】—–“J.U.C”:ReentrantLock之二lock方法分析
- 【Java并发编程实战】—–“J.U.C”:ReentrantLock之二lock方法分析
- 【Java并发编程实战】-----“J.U.C”:ReentrantLock之二lock方法分析
- 分析ReentrantLock之unlock
- J.U.C--locks--ReentrantLock
- 【死磕Java并发】-----J.U.C之重入锁:ReentrantLock
- ReentrantLock解析,lock与unlock方法分析
- “J.U.C”:ReentrantLock之一简介
- J.U.C之ConcurrentHashMap分析
- “J.U.C”:AQS分析(一)(r)
- C++使用hash_map时警告
- 百度地图在设置中心时,背景变白
- python 科学计算库 - Numpy,Scipy,Pandas
- C# Java间进行RSA加密解密交互 .
- 洛谷 P1108 低价购买
- “J.U.C”:ReentrantLock之三unlock方法分析(r)
- HDU3792---Twin Prime Conjecture(树状数组)
- app/android:showAsAction的区别
- 基础(1)
- KMP算法的实现
- Leetcode 5 Longest Palindromic Substring
- rolling invalidation对子游标产生的影响
- linux安装 和 启动的过程
- HDU-4300 Clairewd’s message + 4333(扩展KMP)