2 回答

TA貢獻1712條經驗 獲得超3個贊
您可能希望有一個Task class
(擴展或包裝Runnable
)實現中斷機制(例如boolean
標志)的線程,而不是干擾線程。
當你執行你的任務時,你需要定期檢查這個標志,如果它被設置,任務應該停止它正在做的事情。此時您可能想要返回一個特定的結果,告訴您的代碼任務已成功取消。
如果用戶現在決定不再需要此任務的結果,則必須設置此標志。然而,此時任務可能已經完成,因此您仍然需要處理結果已經存在但用戶不再關心它的情況。
線程級別的中斷并不能保證線程停止工作。這僅在線程處于可以接收interrupt
.
此外,您不應直接干擾 的線程ExecutorSerivce
,因為您可能會無意中停止不同的任務或停止ExecutorSerivce
正常工作。

TA貢獻1826條經驗 獲得超6個贊
您為什么要終止該任務并繼續執行下一個任務?如果是時間問題,您可以定義比您在執行它們的方法中聲明的時間更長的線程將被自動取消。例如:
ExecutorService executor = Executors.newSingleThreadExecutor();
executor.invokeAll(Arrays.asList(new Task()), 60, TimeUnit.SECONDS); // Timeout of 60 seconds.
executor.shutdown();
如果任何線程花費的時間超過 60 秒,它將拋出一個cancellation.Exception()你必須捕獲的
添加回答
舉報