今天是畢業入職的第一個周末,一直對多線程併發方面的知識比較感興趣,因為目前我手裡的項目並沒有涉及到併發方面的知識,所以怕以後遺忘,也便於以後複習和使用,所以總結了一下Lock裡面的一些類的方法。具體的代碼實現例子我在這裡就不做說明解釋了,這些方法都比較容易理解和使用,如果實在是忘記的話可以在隨時查閱 ...
今天是畢業入職的第一個周末,一直對多線程併發方面的知識比較感興趣,因為目前我手裡的項目並沒有涉及到併發方面的知識,所以怕以後遺忘,也便於以後複習和使用,所以總結了一下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這塊的內容我就暫時先寫這麼多,後續會繼續補充分析他們的源碼實現,會有更多的內容涉及到,我會在併發這個路上一直走下去的