没有合适的资源?快使用搜索试试~ 我知道了~
带你看看Javad的锁-ReentrantLock前言ReentrantLock简介Synchronized对比用法源码分析代码结构方法分析SyncNonfairSyncFairSync非公平锁VS公平锁什么是公平非公平ReentrantLockReentrantLock的构造函数lock加锁方法非公平的加锁公平的加锁unlock解锁总结公平锁 VS 非公平锁Synchronized VS ReentrantLock 前言 AQS一共花了5篇文章,对里面实现的核心源码都做了注解 也和大家详细描述了下,后面的几篇文字我将和大家聊聊一下AQS的实际使用,主要会聊几张锁,第一篇我会和大家聊下Reen
资源推荐
资源详情
资源评论
带你看看带你看看Java的锁的锁(一一)-ReentrantLock
带你看看带你看看Javad的锁的锁-ReentrantLock前言ReentrantLock简介Synchronized对比用法源码分析代码结构方法分析SyncNonfairSyncFairSync非公平锁VS公平锁什么是公平非公平
ReentrantLockReentrantLock的构造函数lock加锁方法非公平的加锁公平的加锁unlock解锁总结公平锁 VS 非公平锁Synchronized VS ReentrantLock
前言前言
AQS一共花了5篇文章,对里面实现的核心源码都做了注解 也和大家详细描述了下,后面的几篇文字我将和大家聊聊一下AQS的实际使用,主要会聊几张锁,第一篇我会和大家聊下
ReentrantLock 重入锁,虽然在讲AQS中也穿插了讲了一下,但是我还是深入的聊下
ReentrantLock简介简介
ReentrantLock中文翻译:重入锁。那具体重入是什么意思呢,如果看过前面几篇文章的人,应该了解一下,简答的说就是AQS同步器里面的State相当于一个计数器,如果某一个线程
获取锁了以后再再次去获取锁,这个计算器State就会+1.后面的代码中会详细的描述到。
还有一个重要的点 就是lock和Condition的联合使用,ReentrantLock可以创建一个Condition,这个我在条件队列的文章中详细描述过。
Synchronized对比对比
ReentrantLock是一个排他锁,也就是同一个时刻只会有一个线程能获取到锁,这个主要利用的就是AQS的独占模式实现的。ReentrantLock能保证在多线程的情况下的线程执行安
全,那就会想到Synchronized的关键字。Synchronized是JVM实现的,ReentrantLock是由JDK实现的,ReentrantLock相对于比较灵活,可以设置时间等待,线程中断,锁投票等,
但是一定用完记得要在finally手动释放,Synchronized是JVM做自动释放锁的操作。
用法用法
/**
* @ClassName ReentrantLockDemo
* @Auther burgxun
* @Description: 重入锁的Demo
* @Date 2020/4/5 14:21
**/
public class ReentrantLockDemo {
private static ReentrantLock reentrantLock = new ReentrantLock();
public static void main(String[] args) {
for (int i = 0; i {
reentrantLock.lock();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("获取锁的线程是:" + finalI);
reentrantLock.unlock();
}).start();
}
}
}
执行结果是:
org.example.ReentrantLockDemo
获取锁的线程是:1-开始执行
获取锁的线程是:1-执行结束
获取锁的线程是:2-开始执行
获取锁的线程是:2-执行结束
获取锁的线程是:4-开始执行
获取锁的线程是:4-执行结束
获取锁的线程是:3-开始执行
获取锁的线程是:3-执行结束
获取锁的线程是:5-开始执行
获取锁的线程是:5-执行结束
Process finished with exit code 0
从执行结果上从执行结果上 我们可以看到我们可以看到 一个线程执行完成释放锁后才能执行另外一个线程一个线程执行完成释放锁后才能执行另外一个线程
源码分析源码分析
看完了上面的简介和用法,我们进入源码去分析看下 是怎么实现的
代码结构代码结构
方法分析方法分析
从UML类图上面我们可以看到 ReentrantLock有3个内部类,一个是抽象的静态类Sync还有2个实现了Sync的类一个是非公平锁的实现NonfairSync,还有一个是公平锁的实现
资源评论
weixin_38745859
- 粉丝: 3
- 资源: 969
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (源码)基于C语言的系统服务框架.zip
- (源码)基于Spring MVC和MyBatis的选课管理系统.zip
- (源码)基于ArcEngine的GIS数据处理系统.zip
- (源码)基于JavaFX和MySQL的医院挂号管理系统.zip
- (源码)基于IdentityServer4和Finbuckle.MultiTenant的多租户身份认证系统.zip
- (源码)基于Spring Boot和Vue3+ElementPlus的后台管理系统.zip
- (源码)基于C++和Qt框架的dearoot配置管理系统.zip
- (源码)基于 .NET 和 EasyHook 的虚拟文件系统.zip
- (源码)基于Python的金融文档智能分析系统.zip
- (源码)基于Java的医药管理系统.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功