JAVA_Lock

動物園裡的一隻程式猿發表於2017-09-02

  今天是畢業入職的第一個週末,一直對多執行緒併發方面的知識比較感興趣,因為目前我手裡的專案並沒有涉及到併發方面的知識,所以怕以後遺忘,也便於以後複習和使用,所以總結了一下Lock裡面的一些類的方法。具體的程式碼實現例子我在這裡就不做說明解釋了,這些方法都比較容易理解和使用,如果實在是忘記的話可以在隨時查閱資料即可。

ReentrantLock

int getHoldCount():查詢當前執行緒保持此鎖定的個數,也就是呼叫lock方法的次數

int getQueueLength:返回正等待獲取此鎖定的執行緒估計數

int getWiteQueueLength(Condition condition):返回等待與此鎖定相關的給定條件Condition的執行緒估計數。比如有5個執行緒,每個執行緒都執行了同一個condition物件的await()方法,呼叫它的時候返回的int值是5

boolean hasQueuedThread(Thread thread):查詢指定的執行緒是否正在等待獲取此鎖定

boolean hasQueuedThread():查詢是否有執行緒正在等待獲取此鎖定

boolean hasWaiters(Condition condition) :查詢是否有執行緒正在等待此鎖定有關的condition條件

boolean isFair():判斷是不是公平鎖,預設的情況下ReentrantLock類使用的是非公平鎖

boolean isHeldByCurrentThread():作用是查詢當前執行緒是否保持此鎖定

boolean isLocked():作用是查詢此鎖定是否由任意的執行緒保持

void lockInterruptibly():作用是如果當前執行緒未被中斷,則獲取鎖定,如果已經被中斷則出現異常

boolean tryLock():作用是僅在呼叫時鎖定未被另一個執行緒保持的情況下,才獲取該鎖定。

boolean tryLock(Long timeout,TimeUnit unit):作用是,如果鎖定在給定等待時間內沒有被另一個執行緒保持,且當前執行緒未被中斷,則獲取該鎖定

awaiteUntil()

awaitUnintettuptibly()

 

讀寫鎖ReentrantReadWriteLock

讀寫鎖表示有兩個鎖,一個是讀操作相關的鎖,共享鎖。一個是寫操作相關的鎖,排他鎖。多個讀鎖之間不互斥,讀鎖與寫鎖互斥,寫鎖與寫鎖互斥。

讀寫鎖的程式碼例子我就不在這裡列出了,想知道的話可以去隨意的查詢一下資料有很多。

 

Lock這塊的內容我就暫時先寫這麼多,後續會繼續補充分析他們的原始碼實現,會有更多的內容涉及到