亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用ExecutorService等待所有線程完成?

如何使用ExecutorService等待所有線程完成?

POPMUISE 2019-06-20 11:07:35
如何使用ExecutorService等待所有線程完成?我需要一次執行一些任務4,如下所示:ExecutorService taskExecutor = Executors.newFixedThreadPool(4);while(...) {     taskExecutor.execute(new MyTask());}//...wait for completion somehow一旦它們全部完成,如何通知我?現在,我想不出有什么比設置一些全局任務計數器并在每個任務結束時減少它更好的了,然后在無限循環中監視這個計數器使其變為0;或者得到一個期貨列表和無限循環監視器是對所有任務都是Done的。沒有無限循環的更好的解決方案是什么?謝謝。
查看完整描述

3 回答

?
智慧大石

TA貢獻1946條經驗 獲得超3個贊

伯爵唐太奇(CountDownLatch):

CountDownLatch latch = new CountDownLatch(totalNumberOfTasks);ExecutorService taskExecutor = Executors.newFixedThreadPool(4);while(...) {
  taskExecutor.execute(new MyTask());}try {
  latch.await();} catch (InterruptedException E) {
   // handle}

以及在您的任務中(包含在“嘗試/最后”中)

latch.countDown();


查看完整回答
反對 回復 2019-06-20
?
米脂

TA貢獻1836條經驗 獲得超3個贊

ExecutorService.invokeAll()為你而做。

ExecutorService taskExecutor = Executors.newFixedThreadPool(4);List<Callable<?>> tasks; 
// your tasks// invokeAll() returns when all tasks are completeList<Future<?>> futures = taskExecutor.invokeAll(tasks);


查看完整回答
反對 回復 2019-06-20
?
偶然的你

TA貢獻1841條經驗 獲得超3個贊

基本上ExecutorService你打電話shutdown()然后awaitTermination():

ExecutorService taskExecutor = Executors.newFixedThreadPool(4);while(...) {
  taskExecutor.execute(new MyTask());}taskExecutor.shutdown();try {
  taskExecutor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);} catch (InterruptedException e) {
  ...}


查看完整回答
反對 回復 2019-06-20
  • 3 回答
  • 0 關注
  • 2090 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號