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()) {
/**
* 看了AbstractOwnableSynchronizer定义
* private transient Thread exclusiveOwnerThread;
* 为什么不使用volatile?
* 当state不为0的时候,,其他线程不可能会修改exclusiveOwnerThread,,,
* 因为其他线程得不到锁,,,所以不需要用到同步状态语义
*
*
*
* /
int nextc = c + acquires;
if (nextc < 0) // overflow
throw new Error("Maximum lock count exceeded");
setState(nextc);
return true;
}
return false;
}
ReentrantLock 源码分析
最新推荐文章于 2022-09-19 23:54:02 发布