Java 併發程式設計(十二) -- ReentrantLock中的非公平鎖NonfairSync

我很醜發表於2020-03-15

1. 類的定義

static final class NonfairSync extends Sync
複製程式碼

從類的定義中可以看出

  • NonfairSync是ReentrantLock中的一個靜態內部類,並且使用final修飾,表示不可繼承
  • NonfairSync 繼承了Sync,表明NonfairSync也是AbstractQueuedSynchronizer的子類

2. 欄位屬性

//序列化版本號
private static final long serialVersionUID = -3000897897090466540L;
複製程式碼

3. 方法

lock 方法

//上鎖
final void lock() {
    		//非公平鎖,直接獲取鎖即可
            if (compareAndSetState(0, 1))
                //獲取成功把鎖的佔有執行緒設定為當前執行緒
                setExclusiveOwnerThread(Thread.currentThread());
            else
                //直接獲取鎖失敗,呼叫AbstractQueuedSynchronizer的acquire方法
    			//先嚐試獲取鎖,失敗的話進入等待佇列
                acquire(1);
        }
複製程式碼

tryAcquire 方法

//嘗試獲取鎖的方法,重寫父類的方法
protected final boolean tryAcquire(int acquires) {
    		//直接呼叫ReentrantLock的nonfairTryAcquire方法
            return nonfairTryAcquire(acquires);
        }
複製程式碼

相關文章