2015-05-03 101 views
-4

我的問題是,我有兩個線程t1和t2。他們兩個都做了一些計算,根據我的程序,我想使用併發技術阻塞,直到t1和t2完成任務,然後繼續。做的ExecutorService和CountDownLatch阻止主線程,直到他們完成?

我試過countdownLatch,我讀了關於ExecutorService的一個小例子。關於ExecutorService我不喜歡的東西如下:

executor.execute(new RunnableClass(bgr,3)) 
executor.execute(new RunnableClass(bgr,7)) 
executor.shutdown(); 

if (executor.isTerminated()) { 
    print("terminated") 
} 

,並在「終止」從來沒有印刷,這意味着executorService對象不會阻塞。

請讓meknow whih併發技術,我應該使用適合我的情況

+1

認真閱讀API文檔。答案在這裏:http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html#shutdown%28%29 –

+0

'isTerminated()'不檢查執行者被關閉,它會檢查它是否被終止。正如JB Nizet所說,閱讀文檔,這很清楚。如果您對該文檔有任何疑問,請告訴我們。 – m0skit0

+0

@ m0skit0我知道isterminated()並不檢查執行程序是否關閉或者沒有..我想阻塞,直到t1和t2完成執行,這樣我的cn繼續..請告訴 – user2121

回答

0

閱讀該文檔總是會在開始編碼之前澄清東西.. 但只是想分享幾點:1。 ) CountDownLatch可以解決您的問題。在你編碼之前閱讀這個鏈接。 http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CountDownLatch.html 基本上這個概念是,你已經鎖定你的程序處於一個固定的狀態,並阻止它繼續進行,直到鎖定釋放。 所以你有2個線程...設置一個countdownlatch值爲2.使兩個線程減少它們完成後的值。直到鎖存器值遞減到0,主線程將等待這個發生。

executor.shutdown ....參考文檔...它說,它等待所有提交的任務完成之前關閉。

相關問題