我正在使用ExecutorService
(全局聲明)同時運行多線程。 ExecutorService
將需要一個小時才能完成任務。 所以我需要得到當前正在運行的線程詳細信息,如活動線程,排隊線程和已完成線程。從ExecutorService獲取當前正在運行的線程對象
當我殺ExecutorService
,在ExecutorService
喪生,但該線程在後臺運行。因此,在殺死ExecutorService之前,我需要獲取線程對象ExecutorService
並使用循環或迭代器手動殺死線程。
例如:
ExecutorService有5個線程。
每個線程都由invokeall()執行。每個線程將在一小時後結束。
但事情是我需要在15分鐘內停止通過發送新的請求到服務器或調用某種方法。
這裏關機或關機現在停止執行程序,但不是那5個線程。 這就是問題所在。所以我需要手動殺死這些線程。如何殺死執行程序服務中手動附加的線程?
正常情況下,您的主線程將在主線程上調用awaitTermination(),該線程將有效地加入它並防止在作業完成之前終止。你有迄今爲止嘗試過的任何代碼嗎? –
可能重複的[如何等待所有線程完成,使用ExecutorService?](http://stackoverflow.com/questions/1250643/how-to-wait-for-all-threads-to-finish-using-executorservice ) – Sikorski
您能否澄清一下:您是否需要自己獲取*線程*或*任務*,爲什麼?正如其他評論所顯示的,有辦法知道執行者是否已完成其工作,獲取待執行任務的數量,如果這是您的目標,那麼線程實際上並不是**抽象的良好單位,一起工作。另外,你不能殺死和執行者服務,你只能關閉它,這對於它的任務和它的線程有什麼不同的意義。也沒有辦法在Java中殺死線程(只有不推薦的,不可靠的方式) – GPI