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鎖在同乙個時間點只能被乙...