Java中Lock原理探究以及调用过程
2023-03-20 15:25:43 时间
在对于lock锁的使用上,很多人只是掌握了最基础的方法,但是对实现的过程不是很清楚。这里我们对lock锁功能的实现进行分析,以ReentrantLock为例,分析它的锁类型,并对相关的调用方法进行展示。下面我们就一起看看Java中Lock原理过程的一些具体操作,内容一起往下看。
1.ReentrantLock的调用过程
/** * Creates an instance of {@code ReentrantLock}. * This is equivalent to using {@code ReentrantLock(false)}. */ public ReentrantLock() { sync = new NonfairSync(); }
经过观察ReentrantLock把所有Lock接口的操作都委派到一个Sync类上,该类继承了AbstractQueuedSynchronizer:
static abstract class Sync extends AbstractQueuedSynchronizer
Sync又有两个子类:
final static class NonfairSync extends Sync final static class FairSync extends Sync
2.Reentrant.lock()调用默认非公平锁
非公平锁:比较粗鲁,上来就直接尝试占有锁,如果尝试失败,就再采用类似公平锁那种方式。
通过上面调用过程及AbstractQueuedSynchronizer的注释可以发现,AbstractQueuedSynchronizer中抽象了绝大多数Lock的功能,而只把tryAcquire方法延迟到子类中实现。tryAcquire方法的语义在于用具体子类判断请求线程是否可以获得锁,无论成功与否AbstractQueuedSynchronizer都将处理后面的流程。
以上就是Java中Lock原理探究,相信大家在看完本篇文章后,对lock使用的方法有了更加深刻的理解,学会后可以就一些lock使用进行尝试。
相关文章
- 32位eclipse能用64位jdk吗?
- LeetCode笔记:141. Linked List Cycle
- Flink重点难点:Flink任务综合调优(Checkpoint/反压/内存)
- Java Review - 并发编程_前置知识二
- Java解惑五:类之谜
- Maven 依赖调解源码解析(六):dependencyManagement 版本锁定
- Maven 依赖调解源码解析(五):同一个文件内声明,后者覆盖前者
- Maven 依赖调解源码解析(四):传递依赖,第一声明者优先
- Maven 依赖调解源码解析(三):传递依赖,路径最近者优先
- Maven 依赖调解源码解析(二):如何调试 Maven 源码和插件源码
- Maven 依赖调解源码解析(一):开篇
- jenkens2权威指南
- Java的脚本机制、编译器API
- Java 定时任务
- Java 中的屠龙之术:如何修改语法树?
- 并发编程系列之volatile关键字详解
- 并发编程系列之什么是Java内存模型?
- Java 反射 VS Kotlin 反射
- Java字节码修改 - javassist
- 临时修改jar包内容