儘管這是挺好的解決辦法,當絕對談不上最佳,本篇文章進一步講解更優的解決方案。
使用latch(門閂)替代wait、notify來進行通知,其好處是通訊方式簡單,同時也可以指定等待時間。
countdownlatch不涉及鎖定,當count的值為零的時候當前執行緒繼續執行。
當不涉及同步,只是涉及執行緒通訊的時候,用synchronized + wait/notify顯得太重了,這是應用考慮countdownlatch。
**如下:
在上面**中,t2執行緒先啟動,判斷容器size不為5的時候,呼叫countdownlatch的await,開始等待;t1執行緒啟動後,for迴圈每秒往容器中新增乙個元素,當容器中元素個數為5的時候,呼叫countdownlatch的countdown方法,此時count值減為0,t1執行緒繼續執行,而t2執行緒不受影響。這個過程中,沒有加鎖,也沒有釋放鎖,通訊過程非常簡單。public class mycontainer3
public integer size()
public static void main(string args) catch (exception e)
}system.out.println("thread 2 end.");
}, "t2").start();
new thread(()->
thread.sleep(1000);
}} catch (exception e)
}, "t1").start();
}}
實戰Java高併發程式設計之概念
學習高併發你必須知道的幾個重要的概念 1.同步 synchronous 和非同步 asynchronous 同步和非同步是對方法的呼叫而言的 同步呼叫時,會等待呼叫的方法完成以後才能繼續執行這個方法。非同步呼叫的時候會瞬間的返回,但是並不是表示這個請求已經完成了,但是會在後台起乙個執行緒去執行接下來...
java高併發程式設計之深入理解Thread建構函式
2.1 執行緒的命名 構造中含有string name引數的就表示執行緒的名字。還可以呼叫thread 類的setname 方法重新命名 2.2 執行緒的父子關係 thread的所有建構函式,最終都會去呼叫乙個靜態方法init.private void init threadgroup g,runn...
java併發程式設計之Exchanger
exchanger v 可以交換的物件型別 可以在對中對元素進行配對和交換的執行緒的同步點。每個執行緒將條目上的某個方法呈現給 exchange 方法,與夥伴執行緒進行匹配,並且在返回時接收其夥伴的物件。exchanger 可能被視為 synchronousqueue 的雙向形式。exchanger...