簡體   English   中英

當一個任務在Threadpool執行程序中返回無效時,如何取消任務中的所有線程

[英]How to cancel all threads in tasks when one task returns invalid in Threadpool executor

我有提交給ThreadPoolExecutor的任意數量的任務。 無論任務是否成功,這些任務中的每一個都會返回一個代碼。 我想發生的事情是,返回失敗代碼的第一個任務將使其他所有任務無效/取消/中斷,幾乎就像將整個電路短路以節省時間一樣。 如果沒有任務失敗,那么所有任務都將運行。 假定任務被設計為優雅地處理中斷

for(int i = 0; i < size; i++) {
  Future<?> future = executor.submit(new Runnable() {
    @Override
     public void run() {
         returnValue = performWork();
         if(returnValue == FAILED)
             // signal cancel other tasks??
     }  
   });

   futureTaskList.add(future);
}

我試圖考慮一個好的設計,該設計將允許我檢查returnValue ,如果它返回失敗的值,則可以取消其余任務的工作。

我可以遍歷所有期貨並執行get()但這不是我想要的,因為它會阻塞該特定任務,直到完成為止,但是如果另一個任務已經完成但結果失敗了怎么辦?

有什么方法可以最有效地完成此任務?

編輯:可能的重復問題: 在Java中,我如何等待所有任務,但是在出現第一個錯誤時停止?

如果使用ThreadPoolExecutor ,它將在beforeExecute()提供一個鈎子。 您可以使用它來檢查原子標記(由失敗的任務設置),以確定是否要取消給定的Runnable 尚未實際嘗試過,但它可能會起作用。

暫無
暫無

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

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