多线程---Lock和ReentrantLock使用详情
- (一)Lock和ReentrantLock介绍和使用
-
- (1)Lock和ReentrantLock介绍
- (2)Lock锁实现同步效果
- (3)Lock的trylock方法
- (4)使用Lock时候的线程交互
- (5)总结Lock(ReentrantLock)和synchronized的区别
- (二)LockSuport工具类
-
- (1)LockSuport介绍
- (2)LockSuport特征
- (3)认识parker对象
- (4)void park()方法【消费线程的许可证,挂起线程】
- (5)void unpark(Thread thread)方法【给线程发放许可证,唤醒线程】
- (6)void parkNanos(long nanos)方法
- (7)【推荐】park(Object blocker)方法
- (8)void parkNanos(Object blocker, long nanos)方法
- (9)void parkUntil(Object bocker, long deadline)方法
- (10)方法测试案例
- (三)抽象同步队列AQS概述
-
- (1)AQS介绍
- (2)AQS结构设计
- (3)Node的内部元素
- (4)state状态信息:
- (5)操作state独占方式:
- (6)操作state共享方式:
- (四)ReentrantLock源码分析
-
- 【1】源码中的类和方法介绍
-
- (1)类的继承关系
- (2)类的内部类
-
- (1)内部类Sync、NonfairSync、FairSync介绍
- (2)Sync 类:锁父类
- (3)NonfairSync:采用非公平策略获取锁
- (4)FairSync:采用公平策略获取锁
- (3)类的属性
- (4)类的构造函数【默认非公平锁】
- (5)核心函数分析总结【补上过程的详细描述】
- (6)CAS
- (7)AQS阻塞队列
- (48)AQS的公平锁与非公平锁
-
- (1)公平锁
- (2)非公平锁
- (3)state字段
- (4)AQS的应用场景
- 【2】通过demo引出ReentrantLock的实现
-
- (1)准备好demo方法的代码
- (2)考虑给drawMoney方法加一个ReentrantLock锁
- (3)猜测一下ReentrantLock的lock方法是怎如何阻塞线程?以及为什么?
- 【3】lock方法:线程获取ReentrantLock锁以及加入等待队列
-
- (1)acquire方法【公平&非公平有区别】
- (2)tryAcquire:尝试加锁或者重入锁【公平&非公平有区别】
- (3)addWaiter:把当时所有线程加入AQS等待队列
- (4)acquireQueued:把当前获取锁失败的线程用park方法置为阻塞状态
- (5)获取锁过程总结
- 【4】unlock方法:释放锁过程
-
- (1)release方法
- (2)tryRelease方法:当前线程修改state=0释放锁
- (3)unparkSuccessor方法:unpark唤醒AQS中的下一个线程
- (4)解锁过程总结
- 【5】补充知识
-
- (1)CANCELLED状态节点生成
- (2)中断恢复后的执行流程【中断线程】
- 【6】小结
- 【7】自定义同步工具
- (5)lock()与unlock()实现原理【待处理】
- (五)什么情况下使用ReenTrantLock
-
- (1)ReenTrantLock使用场景
- (2)案例一:使用Lock把MyStack改造为线程安全的类并且实现生产者消费者问题
- (3)案例二:借助tryLock 解决死锁问题
- (六)读写锁ReentrantReadWriteLock的原理
-
- (1)什么情况下使用ReentrantReadWriteLock
- (2)ReentrantReadWriteLock的一些方法
- (3)ReentrantReadWriteLock的优缺点
- (4)ReentrantReadWriteLock使用详解
- (七)JDK8中新增的StampedLock锁的原理

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/33113.html