【发布时间】:2020-03-23 07:01:04
【问题描述】:
在阅读java.util.concurrent.locks.ReentrantLock的源码时发现tryLock()方法的实现如下:
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;
}
根据AbstractQueuedSynchronizer 中维护的state,我们尝试“拥有”锁或检查我们是否已经拥有锁。但我想知道为什么变量 state 被声明为 volatile 而变量 exclusiveOwnerThread 不是?
【问题讨论】:
标签: java volatile reentrantlock