我有使用ExecutorsJava線程池,如何使用shutdownNow()立即停止長時間運行的線程?
ExecutorService executor = Executors.newFixedThreadPool(4);
每個線程都有長時間運行的作業(從其他球隊的一些遺留代碼),這可能會運行幾個小時創建多個線程的主線程。
現在我想使用
executor.shutdownNow()
主線程關閉和我想要的線程能夠立即停止,我怎麼能做到這一點?
在線程,說我們有這樣的代碼:
public void run() {
doA();
doB();
doC();
...
...
}
現在我的問題是,即使我叫shutdownNow
,正在運行的線程將運行到結束,然後停止。我想知道如何停止並退出。
只是想知道爲什麼你使用一個線程的順序任務?可能需要重新設計一下,在你的線程中使用Callables而不是Runnables,你可以嘗試在shutdownNow()調用時調用someTask.cancel()來清除正在運行的任務。 –
這是一個設計問題。我會要求時間窗口稍後再做。對於這個問題,我只想確認在Java中沒有什麼好方法可以像短路一樣停止運行線程。 – Ran
@Ran我的回答是否滿足你的約束? –