亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

跳到單線程 ExecutorSerivce 中的下一個任務?

跳到單線程 ExecutorSerivce 中的下一個任務?

侃侃無極 2023-06-08 13:57:42
我正在考慮實施 ExecutorService 來運行一系列任務。我計劃使用內部隊列讓一些任務等待輪到它們運行。有什么方法可以中斷當前在 ExecutorService 線程中運行的任務(Runnable),并讓線程保持活動狀態以運行下一個任務?或者只能調用.shutdown()然后創建一個新的 ExecutorService?想知道是否還有其他解決方案。
查看完整描述

2 回答

?
交互式愛情

TA貢獻1712條經驗 獲得超3個贊

您可能希望有一個Task class(擴展或包裝Runnable)實現中斷機制(例如boolean標志)的線程,而不是干擾線程。

當你執行你的任務時,你需要定期檢查這個標志,如果它被設置,任務應該停止它正在做的事情。此時您可能想要返回一個特定的結果,告訴您的代碼任務已成功取消。

如果用戶現在決定不再需要此任務的結果,則必須設置此標志。然而,此時任務可能已經完成,因此您仍然需要處理結果已經存在但用戶不再關心它的情況。


線程級別的中斷并不能保證線程停止工作。這僅在線程處于可以接收interrupt.

此外,您不應直接干擾 的線程ExecutorSerivce,因為您可能會無意中停止不同的任務或停止ExecutorSerivce正常工作。


查看完整回答
反對 回復 2023-06-08
?
躍然一笑

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()你必須捕獲的


查看完整回答
反對 回復 2023-06-08
  • 2 回答
  • 0 關注
  • 144 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號