Java多執行緒 程式設計核心技術4Lock

2021-08-21 19:58:02 字數 2004 閱讀 3177

執行緒間同步互斥,且嗅探鎖定、多路分支通知,使用上較synchronized靈活

呼叫該物件的lock()獲取鎖,unlock()釋放鎖

借助condition實現等待/通知模式:condition(物件監視器)是jdk5、靈活性

多路通知:乙個lock物件中建多個condition例項,執行緒物件可以註冊在指定的condition中,有選擇地執行緒通知,排程線性更靈活;

而synchronized相當於整個lock只有單一的condition物件,all的執行緒都註冊在他身上,執行緒開始notifyall時,需要通知所有的waiting執行緒,無選擇權、效率問題

private reentrantlock lock=new reentrantlock();

private condition condition = lock.newcondition();

public void test1() catch (interruptedexception e)

}

object中的wait、wait(long timeout)、notify、notifyall分別相當於condition類中的await、await(long time ,timeunit unit)、signal、signalall方法,但是這個signalall也不全是all:喚醒在lock物件上等待的所有執行緒。

建立例項時的true、false

公平鎖:執行緒獲取鎖的順序是按照執行緒加鎖的順序來分配的,先來先得fifo

非公平鎖:獲取鎖的搶占機制,隨機獲得鎖

1、getholdcount查詢當前執行緒保持此鎖定的個數,呼叫lock的次數

2、getqueuelength返回等待獲取此鎖定的執行緒的估計數

3、getwaitqueuelength(condition condition)返回 等待 與 此鎖定相關的給定條件的 執行緒估計數

4、boolean hasqueuedthread(thread thread)查詢指定的執行緒是否正在等待獲取此鎖定

5、boolean hasqueuedthreads查詢是否有執行緒正在等待獲取此鎖定

6、boolean haswaiters(condition condition)查詢是否有執行緒正在等待與此鎖定有關的condition條件

7、isfair判斷是不是公平鎖,預設非公平鎖

8、isheldbycurrentthread查詢當前執行緒是否保持此鎖定,islocked查詢此鎖定是否由任意執行緒保持

9、lockinterruptibly鎖定時如果當前執行緒未被中斷則獲取鎖定,如果已被中斷則出現異常,提lock.lock()

10、boolean trylock:僅在呼叫時鎖定 未被另外乙個執行緒保持的情況下 才獲取該鎖定

讀這句話真痛苦,目測說的是:只有當前鎖沒有被鎖定時 才能獲取當前鎖

11、boolean trylock(long timeout,timeunit unit)在當前執行緒未被中斷的情況下 鎖定 未被鎖定 的鎖

1、awaituninterruptibly,在當前執行緒鎖定的情況下如果被中斷則正常執行不會報錯

2、awaituntil(* *):執行緒在等待時間到達前,可以被其他執行緒提前喚醒,獲取鎖、執行方法

加快執行效率,在某些不需要操作例項變數的方法中,可以使用讀寫鎖來提公升執行速度

private reentrantreadwritelock readwritelock = new reentrantreadwritelock();

public void testmethod() finally

}

嘻嘻,忘了告訴你 寫讀也是互斥滴,放心遇到寫鎖就互斥

小結:可以使用lock是synchronized的高階,前者可以替換掉後者,掌握lock你猜會怎麼樣,此處省略……咳~簡單說一下:有助於學習並發包中源**的實現原理,在並發包中大量的類使用lock介面作為同步處理的方式,試不試狠李海୧(๑•̀◡•́๑)૭然而都是作者說的,謝謝作者的分享^_^

Java 多執行緒程式設計核心技術4 Lock

呼叫lock.lock 的執行緒就持有了 物件監視器 其他執行緒只有等待鎖被釋放時再次爭搶。效果和使用synchronized關鍵字一樣,執行緒之間執行的順序是隨機的。呼叫reentrantlock物件的lock 方法獲取鎖,呼叫unlock 方法釋放鎖。condition類具有更好的靈活性,比如可...

《java多執行緒程式設計核心技術》核心筆記 一

執行緒具有優先順序 執行緒的優先順序具有繼承特性。被呼叫者繼承呼叫者的優先順序 優先順序高的執行緒 絕大部分會現執行 方法內的變數是執行緒安全的。多個執行緒訪問同乙個物件的同步方法時,一定是執行緒安全的。synchronized取得的是物件鎖 多個執行緒訪問乙個物件 synchronized 如果乙...

Java多執行緒 程式設計核心技術5 Lock

1 計畫時間早於當前時間,提前執行 2 timertask類的cancel 方法 將自身從任務佇列中清除 3 timer類的cancel方法 清空任務佇列的全部任務 如果該方法沒有搶到鎖,任務還是繼續執行 4 schedule timertask task long delay,long perio...