ReentrantLock「程式設計題」

2022-09-23 19:09:08 字數 879 閱讀 2975

1、重入鎖

表示乙個執行緒可以對資源重複枷鎖,支援獲取鎖時的公平性和非公平性加鎖。

公平性:在絕對時間上,先對鎖進行獲取的請求一定被滿足,則此鎖是公平的,反之,不公平。

2、獲取鎖

預設非公平鎖

final boolean nonfairtryacquire(int acquires)

}else if (current == getexclusiveownerthread())

return false;

}判斷當前執行緒是否獲取了鎖,若獲取鎖的執行緒再次請求,則將同步狀態值進行增加,並返回true,表示獲取同步狀態成功。

3)釋放鎖

protected final boolean tryrelease(int releases)

setstate(c);

return free;

}釋放鎖,對應的減少同步狀態值。

若該鎖獲取了n次,那麼前(n-1)次tryrelease(int releases)方法返回false,只有同步狀態完全釋放了,即第n次,才能返回true。

3、公平鎖的獲取

protected final boolean tryacquire(int acquires)

}else if (current == getexclusiveownerthread())

return false;

}與唯一不同的是多了乙個hasqueuedpredecessors()方法,即當前節點是否有前驅節點,若有,則表示有執行緒比當前執行緒更早多請求獲取鎖,需等待前驅執行緒釋放鎖之後才能獲取鎖。

公平性保證了鎖的獲取按照fifo的原則,而代價是大量的執行緒切換;

非公平性雖然會造成執行緒「飢餓」,但極少的執行緒切換,保證更大的吞吐量。

併發程式設計 ReentrantLock

2.公平模式 響應中斷 超時需要實現的技術點 對於鎖的獲取分為公平模式和非公平模式。預設是非公平模式。可由構造器引數來指定。嘗試獲取鎖,如果獲取成功返回true,如果獲取失敗直接返回false。獲取鎖。對於鎖的獲取成功與否,使用cas方式判定。如果獲取失敗,則執行acquire 方法。acquire...

併發程式設計 ReentrantLock

解鎖過程 reentrantlock繼承自abstractqueuedsynchronizer,即aqs,aqs可以理解為乙個執行緒排隊獲取cpu的佇列。佇列中放的是乙個個的node。prev head tail volatile node prev volatile node next volat...

3 併發程式設計 ReentrantLock 細節說明

title 併發程式設計 reentrantlock 細節說明 date 2018 07 05 09 06 57 categories 併發程式設計 1.reentrantlock 是乙個可重入的互斥鎖,又被稱為 獨佔鎖 reentrantlock reentrantlock鎖在同乙個時間點只能被乙...