多執行緒2
1.同步:多個執行緒需要對同一資料的存取。兩銀行賬戶資金互轉,如果兩個執行緒同時取A賬戶金額100,轉50給賬戶B,A賬戶只減了50,B賬戶卻加了100;
2.鎖物件:synchronized;Lock l=new ReentrantLock();
ReentrantLock()如果傳入true,得到一個公平策略鎖物件,等待時間越長的執行緒越容易獲得該鎖,該鎖會大大降低效能。
l.lock()加鎖;l.unlock()釋放鎖;為了防止程式丟擲異常,不釋放鎖從而造成死鎖,應該在finally塊中釋放鎖;
3.條件物件:當執行緒進入臨界區,卻發現只有某一條件滿足之後才能執行,要用條件物件管理那些獲得了鎖卻不能做有用工作的執行緒。
銀行賬戶轉賬問題說明:一個執行緒獲得鎖物件,進行轉賬時發現賬戶餘額不足,就不能進行轉賬,其他執行緒也不能對該賬戶進行存錢,因為鎖具有排它性,所有需要條件物件。
鎖物件呼叫newCondition()獲得條件物件Cindition,條件物件.await()當前物件阻塞並放棄鎖;signal()隨機解除當前條件物件的等待集中某個執行緒的阻塞狀態,signalAll()解除當前條件物件等待集中所有執行緒。
await()用法:
while(條件判斷){Condition物件.await(); }
解除阻塞並得到鎖的執行緒會從阻塞的地方開始執行。
4.synchronized:每個物件有個內部鎖,該鎖有個內部條件,內部鎖控制要進入synchronized方法的執行緒,內部條件管理呼叫了wait()的執行緒。
儘量不使用synchronized與Lock/Condition而使用concurrent包工具。
5.同步阻塞:進入一個同步阻塞獲得鎖synchronized(obj){。。。}
6.監視器:
相關文章
- Java多執行緒(2)執行緒鎖Java執行緒
- 執行緒2--多執行緒NSThread執行緒thread
- java 多執行緒-2Java執行緒
- unity多執行緒2Unity執行緒
- Java多執行緒學習(2)執行緒控制Java執行緒
- 4、Linux多執行緒,執行緒同步(2)Linux執行緒
- 多執行緒(2)-執行緒同步互斥鎖Mutex執行緒Mutex
- 多執行緒(2)-執行緒同步條件變數執行緒變數
- 多執行緒和多執行緒同步執行緒
- 多執行緒【執行緒池】執行緒
- 多執行緒--執行緒管理執行緒
- Java多執行緒——執行緒Java執行緒
- 執行緒與多執行緒執行緒
- iOS 多執行緒筆記_(2)iOS執行緒筆記
- VC多執行緒 C++ 多執行緒執行緒C++
- 【java】【多執行緒】建立執行緒的兩種常用方式(2)Java執行緒
- C#多執行緒之旅(2):建立和開始執行緒C#執行緒
- 多執行緒-執行緒控制之休眠執行緒執行緒
- 多執行緒-執行緒控制之加入執行緒執行緒
- 多執行緒-執行緒控制之禮讓執行緒執行緒
- 多執行緒-執行緒控制之中斷執行緒執行緒
- 多執行緒之初識執行緒執行緒
- Java多執行緒-執行緒中止Java執行緒
- Java多執行緒——執行緒池Java執行緒
- 多執行緒-執行緒概述等執行緒
- 最全java多執行緒總結2--如何進行執行緒同步Java執行緒
- 多執行緒系列(1),多執行緒基礎執行緒
- 多執行緒系列(二):多執行緒基礎執行緒
- 多執行緒------執行緒與程式/執行緒排程/建立執行緒執行緒
- 多執行緒-執行緒控制之守護執行緒執行緒
- a、多執行緒執行緒
- java 多執行緒守護執行緒Java執行緒
- Java多執行緒-執行緒通訊Java執行緒
- Java多執行緒-執行緒狀態Java執行緒
- java多執行緒9:執行緒池Java執行緒
- Java多執行緒之執行緒中止Java執行緒
- 多執行緒系列之 執行緒安全執行緒
- iOS 多執行緒之執行緒安全iOS執行緒