1. 類的定義
abstract static class Sync extends AbstractQueuedSynchronizer
複製程式碼
從類的定義中可以看出
- Sync是一個抽象類
- Sync繼承了AbstractQueuedSynchronizer類
2. 欄位屬性
//序列化版本號
private static final long serialVersionUID = -5179523762034025860L;
複製程式碼
3. 方法
lock 方法
//上鎖,抽象方法,讓子類實現
abstract void lock();
複製程式碼
nonfairTryAcquire 方法
//嘗試獲取不公平鎖
final boolean nonfairTryAcquire(int acquires) {
//獲取當前執行緒
final Thread current = Thread.currentThread();
//獲取當前鎖的狀態
int c = getState();
if (c == 0) {
//表示當前沒有執行緒獲取鎖
//CAS方式獲取鎖
if (compareAndSetState(0, acquires)) {
//獲取成功,把持有當前鎖的執行緒設定為當前執行緒
setExclusiveOwnerThread(current);
//返回true
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;
}
//獲取鎖失敗返回false
return false;
}
複製程式碼
tryRelease 方法
//嘗試釋放鎖
protected final boolean tryRelease(int releases) {
//計算新的狀態值
int c = getState() - releases;
//如果當前執行緒沒有持有當前鎖,丟擲異常
if (Thread.currentThread() != getExclusiveOwnerThread())
throw new IllegalMonitorStateException();
//是否完全釋放標誌
boolean free = false;
if (c == 0) {
//狀態為0表示完全釋放
//完全釋放標誌設定為true
free = true;
//把持有當前鎖的執行緒置為null
setExclusiveOwnerThread(null);
}
//重新設定鎖的狀態
setState(c);
return free;
}
複製程式碼
isHeldExclusively 方法
//判斷持有鎖的是否為當前執行緒
protected final boolean isHeldExclusively() {
return getExclusiveOwnerThread() == Thread.currentThread();
}
複製程式碼
newCondition 方法
//獲取一個新的Condition物件
final ConditionObject newCondition() {
return new ConditionObject();
}
複製程式碼
getOwner 方法
//獲取持有當前鎖的執行緒
final Thread getOwner() {
return getState() == 0 ? null : getExclusiveOwnerThread();
}
複製程式碼
getHoldCount 方法
//獲取當前鎖被持有的次數
final int getHoldCount() {
return isHeldExclusively() ? getState() : 0;
}
複製程式碼
isLocked 方法
//判斷是否有執行緒持有當前鎖
final boolean isLocked() {
return getState() != 0;
}
複製程式碼