1、使用join
public
class
testcountdownlatch2
for(int i=0;i<10;i++)
for(int i=0;i<10;i++)
system.out.println("main done!");
}}class
workthread
implements
runnable
}
2、使用executorservice.isterminated死迴圈判斷
public
class
testcountdownlatch
system.out.println("submit all task");
executorservice.shutdown(); // stop accept new task
while(!executorservice.isterminated())
system.out.println("main thread done!");
}}class
workthread
implements
runnable
catch (interruptedexception e)
}}
3、使用countdownlatch
特點:countdown方法可以用在任何地方,可以是n個執行緒,也可以是1個執行緒裡的n個執行步驟
public
class testcountdownlatch2
system.out.println("submit all task");
executorservice.shutdown(); // stop accept new task
countdownlatch.await(); // wait until the latch has count down to zero
system.out.println("main done!");
}}class workthread implements runnable
@override
public
void
run()
}
比較總結:
join用於讓當前執行執行緒等待join執行緒執行結束。其實現原理是不停檢查join執行緒是否存活,如果join執行緒存活則讓當前執行緒永遠wait,直到join執行緒中止後,執行緒的this.notifyall會被呼叫推薦使用countdownlatch
Java主線程等待所有子執行緒執行完畢
需求 main方法中建立了執行緒,子執行緒沒有執行結束的時候主線程執行結束了,利用join又不能保證併發執行,目的是主線程等待其子執行緒執行完成之後退出 實現 利用hook實現jvm的等待執行 業務執行緒 class customerthread implements runnable catch ...
java主線程等待所有子執行緒執行完畢在執行
用sleep方法,讓主線程睡眠一段時間,當然這個睡眠時間是主觀的時間,是我們自己定的,這個方法不推薦,但是在這裡還是寫一下,畢竟是解決方法 下面結合這個問題我介紹一些並發包裡非常有用的併發工具類 3.等待多執行緒完成的countdownlatch 4.同步屏障cyclicbarrier 寫到這裡大家...
java主線程等待所有子執行緒執行完畢在執行
用sleep方法,讓主線程睡眠一段時間,當然這個睡眠時間是主觀的時間,是我們自己定的,這個方法不推薦,但是在這裡還是寫一下,畢竟是解決方法 下面結合這個問題我介紹一些並發包裡非常有用的併發工具類 3.等待多執行緒完成的countdownlatch 4.同步屏障cyclicbarrier 寫到這裡大家...