没有合适的资源?快使用搜索试试~ 我知道了~
第五章 ReentrantLock源码解析1--获得非公平锁与公平锁lock()1
需积分: 0 1 下载量 176 浏览量
2022-08-04
14:21:43
上传
评论
收藏 394KB PDF 举报
温馨提示
试读
9页
第五章 ReentrantLock源码解析1--获得非公平锁与公平锁lock()最常用的方式://注意:通常情况下,这个会设置成一个类变量,比如说Segemen
资源详情
资源评论
资源推荐
第五章 ReentrantLock源码解析1--获得非公平锁与公平锁lock()
最常用的方式:
int
a = 12
;
//
注意:通常情况下,这个会设置成一个类变量,比如说Segement中的段锁与copyOnWriteArrayList中的全局锁
final
ReentrantLock lock =
new
ReentrantLock();
lock.lock();
//
获取锁
try
{
a
++;
//
业务逻辑
}
catch
(Exception e) {
}
finally
{
lock.unlock();
//
释放锁
}
1、对于ReentrantLock需要掌握以下几点
ReentrantLock的创建(公平锁/非公平锁)
上锁:lock()
解锁:unlock()
首先说一下类结构:
ReentrantLock-->Lock
NonfairSync/FairSync-->Sync-->AbstractQueuedSynchronizer-->AbstractOwnableSynchronizer
NonfairSync/FairSync-->Sync是ReentrantLock的三个内部类
Node是AbstractQueuedSynchronizer的内部类
注意:上边这四条线,对应关系:"子类"-->"父类"
2、ReentrantLock的创建
支持公平锁(先进来的线程先执行)
支持非公平锁(后进来的线程也可能先执行)
非公平锁与非公平锁的创建
非公平锁:ReentrantLock()或ReentrantLock(false)
final
ReentrantLock lock =
new
ReentrantLock();
公平锁:ReentrantLock(true)
final
ReentrantLock lock =
new
ReentrantLock(
true
)
默认情况下使用非公平锁。
源代码如下:
ReentrantLoc k:
/**
同步器:内部类Sync的一个引用
*/
private
final
Sync sync;
/**
* 创建一个非公平锁
*/
public
ReentrantLock() {
sync
=
new
NonfairSync();
}
/**
* 创建一个锁
*
@param
fair true-->公平锁 false-->非公平锁
*/
public
ReentrantLock(
boolean
fair) {
sync
= (fair)?
new
FairSync() :
new
NonfairSync();
}
上述源代码中出现了三个内部类Sync /N onfairSync /FairSync ,这里只列出类的定义,至于这三个类中的具体的方法会在后续的第一次引用的时候介绍。
Sync /N onfairSync /FairSync 类定义:
第1页 共9页
田仲政
- 粉丝: 15
- 资源: 332
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0