當使用由Executors.newSingleThreadExecutor()
返回的ExecutorService
時,我該如何中斷它?如何中斷ExecutorService的線程
23
A
回答
30
爲了做到這一點,您需要將submit()
任務轉換爲ExecutorService
,而不是調用。當您這樣做時,會返回一個Future
,用於操作計劃任務。特別是,您可以在相關的Future
上調用cancel(true)
來中斷當前正在執行的任務(如果任務尚未開始運行,則完全跳過執行)。
順便提一下,Executors.newSingleThreadExecutor()
返回的對象實際上是ExecutorService
。
4
中斷執行程序的內部管理線程的另一種方法是在ExecutorService
上調用shutdownNow(..)
方法。然而請注意,與@ erickson的解決方案相反,這將導致整個ThreadPoolExecutor
不適合進一步使用。
我發現在該ExecutorService
不再需要,並保持標籤上Future
情況下是不必要的,否則這種情況下,方法尤其有效(這是你的應用程序的exit(..)
方法的一個最好的例子)。從ExecutorService#shutdownNow(..)
的javadoc
相關信息:
嘗試停止所有正在執行的任務,暫停 等待任務的處理,並返回那個正在等待 執行的任務列表。
除了竭盡全力嘗試停止處理 以外,沒有任何保證可以主動執行任務。例如,典型的實現將通過Thread.interrupt取消 ,所以任何不能響應中斷的任務都不會終止。
相關問題
- 1. 如何終止線程的ExecutorService
- 2. 如何鋼絞線的ExecutorService
- 3. Java ExecutorService invokeAll()中斷
- 4. 如何從線程提交Callable到ExecutorService
- 5. 命名線程和ExecutorService的
- 6. 集團線程的ExecutorService
- 7. 如何知道ExecutorService中的所有線程何時完成?
- 8. 僅使用ExecutorService中的線程子集
- 9. 如何中斷此線程?
- 10. ExecutorService invokeall線程池問題
- 11. 關閉空閒線程ExecutorService
- 12. 如何使其ExecutorService中的線程與Runnable進行通信?
- 13. 如何更改ExecutorService中線程的名稱?
- 14. 線程:如何中斷該線程外部的線程
- 15. 線程中斷()不會中斷線程
- 16. 如何中斷Twisted中的線程?
- 17. 如何中斷執行程序線程
- 18. 如何恢復/中斷的BackgroundWorker線程
- 19. Java - 帶ExecutorService的多線程爬蟲
- 20. 線程終止時的Java ExecutorService回調
- 21. 中斷,關機方法和ExecutorService的
- 22. 中斷線程
- 23. 線程中斷
- 24. ExecutorService,如何知道所有線程何時完成而不阻塞主線程?
- 25. 爪哇 - ExecutorService的:如何重新運行 「等待狀態」 線程
- 26. 如何單元測試ExecutorService產生任務的新線程?
- 27. 如何處理不可中斷的阻塞(ExecutorService)
- 28. 我們如何中斷主線程
- 29. Java:如何中斷/停止線程?
- 30. 如何中斷異步線程?
爲此,您不必手動確保線程是可中斷的。並非所有的線程都可以被中斷。 - 我想無論如何。 – 2014-05-09 10:39:06
是的,它描述瞭如何中斷運行任務的線程。任務是否響應中斷是另外一個問題。這取決於任務在做什麼。 – erickson 2014-05-09 17:19:55
@erickson我也有類似的問題[這裏](http://stackoverflow.com/questions/29159184/how-can-i-interrupt-resttemplate-call-as-soon-as-my-thread-is-中斷)與線程中斷有關。如果可能的話,你能幫我在那邊嗎?我還沒有收到任何答覆,所以任何幫助將不勝感激。 – john 2015-03-21 06:45:40