可重入锁 ReentrantLock 源码解读(1)简介
来源:互联网 发布:烘焙软件哪个好 编辑:程序博客网 时间:2024/05/21 15:02
何谓可重入锁:顾名思义--若是在同一个线程上请求锁,则允许获得锁并继续执行代码。否则线程阻塞等待unlock
reentrantLock 是一种独占锁--线程独占
按公平性来分:reentrantLock可分为公平锁和非公平锁
ReentrantLock的构造函数:
public ReentrantLock() {
sync = new NonfairSync();
}
public ReentrantLock(boolean fair) {
sync = (fair)? new FairSync() : new NonfairSync();
}
创建公平锁或非公平锁---公平锁与非公平锁的区别在于,公平锁总是按照等待锁进入队列的顺序,进行解锁的,而非公平锁总是直接检查当前线程是否可获得锁,若当前线程可获得锁,则在等待队列之前先获得锁
二者的实现仅有tryAcquire()不同
公平锁:
protected final boolean tryAcquire(int acquires) {
final Thread current = Thread.currentThread();
int c = getState();
if (c == 0) {
if (isFirst(current) &&
compareAndSetState(0, acquires)) {
setExclusiveOwnerThread(current);
return true;
}
}
else if (current == getExclusiveOwnerThread()) {
int nextc = c + acquires;
if (nextc < 0)
throw new Error("Maximum lock count exceeded");
setState(nextc);
return true;
}
return false;
}
非公平锁:
final boolean nonfairTryAcquire(int acquires) {
final Thread current = Thread.currentThread();
int c = getState();
if (c == 0) {
if (compareAndSetState(0, acquires)) {
setExclusiveOwnerThread(current);
return true;
}
}
else if (current == getExclusiveOwnerThread()) { // 独占锁的持有线程==当前线程
int nextc = c + acquires;
if (nextc < 0) // overflow
throw new Error("Maximum lock count exceeded");
setState(nextc);
return true;
}
return false;
}
- 可重入锁 ReentrantLock 源码解读(1)简介
- 可重入锁 ReentrantLock 源码解读 (2)锁框架 AbstractQueuedSynchronizer
- ReentrantLock可重入锁简介
- Hikaricp源码解读(1)——简介
- Timer 源码解读 (1) TimerTask简介
- jdk源码解读-并发包-Lock-ReentrantLock(1)--lock()与unlock()方法走读
- ReentrantLock 源码
- ReentrantLock源码
- ReentrantLock源码
- mybatis源码解读(1)
- disconf源码解读(1)
- ReentrantLock、AbstractQueuedSynchronizer解读
- 可重入锁(ReentrantLock)
- JDK7中ReentrantLock源码解析(1)
- ReentrantLock源码解析(三):总结
- 尝试阅读ReentrantLock、AbstractQueuedSynchronizer源码(一)
- 尝试阅读ReentrantLock、AbstractQueuedSynchronizer源码(二)
- SEDA简介与源码解读(一)
- 未来的飞机服务
- 十大经典搞笑鬼故事(看你笑,还是哭)
- 惠普JAVA工程师给想从事JAVA开发的朋友一点工作心得
- Oracle网址大全
- eclipse插件集锦
- 可重入锁 ReentrantLock 源码解读(1)简介
- 电影:Dos版的星球大战……
- 宏与内联函数[转]
- 调整好你的舌头,好好试试。
- 世界靠懒人来支撑——马云给雅虎中国员工的精彩演讲
- 山寨文化
- HQL函数汇总
- Oracle中如何计算时间差
- C++运行原理的汇编代码分析 一