// 尝试获取锁
// 尝试获取成功返回true
// 尝试获取失败返回false
final boolean tryLock() {
Thread current = Thread.currentThread();
int c = getState();
// c == 0 说明当前锁处于闲置状态,尝试用CAS修改状态
// 如果修改成功说明当前线程获取到锁
if (c == 0) {
if (compareAndSetState(0, 1)) {
setExclusiveOwnerThread(current);
return true;
}
// 当前线程已经是锁的持有者,此时进行重入逻辑
} else if (getExclusiveOwnerThread() == current) {
// 当c == Integer.MAX_VALUE 时++c会变成负数(-1)
if (++c < 0) // overflow
throw new Error("Maximum lock count exceeded");
// 这里不需要cas,因为不可能同时有两个线程执行到这里
setState(c);
return true;
}
// 获取锁失败
return false;
}