1. 获取当前线程,判断当前的锁的状态
2. 如果state=0表示当前是无锁状态,通过cas更新state状态的值
3. 当前线程是属于重入,则增加重入次数
final boolean nonfairTryAcquire(int acquires) {
final Thread current = Thread.currentThread();//获取当前执
行的线程
int c = getState();//获得state的值
if (c == 0) {//表示无锁状态
if (compareAndSetState(0, acquires)) {//cas替换state的值,cas成功表示获取锁成功
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;
}