使用 ExecutorService 等待執行緒完成
當使用 ExecutorService 並發執行多個任務時,有效處理完成通知變得至關重要。本文探討了等待所有執行緒完成而不依賴無限迴圈的最佳方法。
如問題所述,無限循環不被認為是最佳解決方案。相反,ExecutorService 提供了一個內建機制來管理任務完成:shutdown() 和awaitTermination() 方法。
使用 shutdown() 和awaitTermination()
ExecutorService介面提供了shutdown()方法,該方法通知ExecutorService不再接受新任務。一旦所有目前提交的任務完成,ExecutorService 將終止。
為了等待任務完成,使用了awaitTermination() 方法。此方法有兩個參數:
在問題提供的範例中,程式碼可以修改如下:
ExecutorService taskExecutor = Executors.newFixedThreadPool(4); while(...) { taskExecutor.execute(new MyTask()); } taskExecutor.shutdown(); try { taskExecutor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS); } catch (InterruptedException e) { ... }
Long.MAX_VALUE 逾時可確保awaitTermination() 方法阻塞,直到所有任務完成。如果任務完成對時間敏感,則可以指定有限的逾時。
結論
利用 shutdown() 和awaitTermination() 方法提供了一種可靠且高效的方法等待所有線程完成而不訴諸無限循環。這種方法簡化了任務管理並確保執行緒以受控方式完成。
以上是如何有效率等待ExecutorService線程完成而不出現無限循環?的詳細內容。更多資訊請關注PHP中文網其他相關文章!