2016-11-28 1463 views
0

我正在使用ExecutorService(全局聲明)同時運行多線程ExecutorService將需要一個小時才能完成任務。 所以我需要得到當前正在運行的線程詳細信息,如活動線程,排隊線程已完成線程從ExecutorService獲取當前正在運行的線程對象

當我殺ExecutorService,在ExecutorService喪生,但該線程在後臺運行。因此,在殺死ExecutorService之前,我需要獲取線程對象ExecutorService並使用循環迭代器手動殺死線程。

例如:

ExecutorService有5個線程。

每個線程都由invokeall()執行。每個線程將在一小時後結束。

但事情是我需要在15分鐘內停止通過發送新的請求到服務器或調用某種方法。

這裏關機或關機現在停止執行程序,但不是那5個線程。 這就是問題所在。所以我需要手動殺死這些線程。如何殺死執行程序服務中手動附加的線程?

+0

正常情況下,您的主線程將在主線程上調用awaitTermination(),該線程將有效地加入它並防止在作業完成之前終止。你有迄今爲止嘗試過的任何代碼嗎? –

+1

可能重複的[如何等待所有線程完成,使用ExecutorService?](http://stackoverflow.com/questions/1250643/how-to-wait-for-all-threads-to-finish-using-executorservice ) – Sikorski

+0

您能否澄清一下:您是否需要自己獲取*線程*或*任務*,爲什麼?正如其他評論所顯示的,有辦法知道執行者是否已完成其工作,獲取待執行任務的數量,如果這是您的目標,那麼線程實際上並不是**抽象的良好單位,一起工作。另外,你不能殺死和執行者服務,你只能關閉它,這對於它的任務和它的線程有什麼不同的意義。也沒有辦法在Java中殺死線程(只有不推薦的,不可靠的方式) – GPI

回答

0

我找到了解決辦法,所有線程都在追加可贖回,並 使用的ExecutorService調用可贖回線程。 ExecutorService只包含活動,隊列和完成詳細信息的值。執行後,結果將使用未來類獲取該值。

現在,如果我想在完成之前停止執行。我需要調用可調用對象並將其轉換爲線程對象,並在線程不爲空​​時手動停止。 因此,Callable對象也會變爲全局變量。 結束執行刪除這些對象。

相關問題