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

智慧大石
TA貢獻1946條經驗 獲得超3個贊
CountDownLatch latch = new CountDownLatch(totalNumberOfTasks);ExecutorService taskExecutor = Executors.newFixedThreadPool(4);while(...) { taskExecutor.execute(new MyTask());}try { latch.await();} catch (InterruptedException E) { // handle}
latch.countDown();

米脂
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);

偶然的你
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) { ...}
添加回答
舉報
0/150
提交
取消