Java等待多個執行緒執行完畢

2021-08-07 12:28:51 字數 1380 閱讀 7275

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 寫到這裡大家...