[英]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.