簡體   English   中英

Java通過使用另一個線程檢查線程的狀態

[英]Java checking the status of threads by using another thread

我有一個程序,其中一堆線程執行一些任務。 我想知道所有這些線程何時完成,以便我可以對它們的結果進行其他處理。 我不想使用Thread.join東西。 我更喜歡在所有這些線程上進行另一個線程檢查,並在發現它們完成時執行一些特殊任務。 關於如何做到這一點的任何想法?

我會像這樣使用ExecutorService

List<Future> futures = new ArrayList<Future>();
for(int i = 0; i < N_TASKS; i++)
    futures.add(executorService.submit(new Task(i));

// wait for all tasks to complete.
for(Future future : futures) future.get();

實際上,阻塞更容易實現,更可靠,並且不會引入任何額外的開銷/延遲。 如果您不想使用join() ,請考慮CountDownLatch ,它允許您等待一組線程。

另外,更愉快的方法是ExecutorService包裹着輕便ExecutorCompletionService

兩種方法都可以非阻塞方式使用,例如,僅窺視而不是阻塞並等待結果。 但是為了不浪費CPU周期,請有單獨的后台線程阻塞並等待結果,並在所有輔助線程完成后立即發送一些事件。

或者,讓每個輔助線程在完成后發送一個事件。 一旦接收到的事件數量達到啟動的工作程序數量,接收這些事件的對象將知道處理已完成。 使用番石榴的ListenableFuture ,您甚至可以避免多余的看門狗線程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM