[英]Only one thread running from ExecutorService newFixedThreadPool of size 5
[英]Get currently running thread objects from ExecutorService
我正在使用ExecutorService
(全局聲明)在同一時間運行多線程 。 ExecutorService
將花費一個小時來完成任務。 所以我需要獲取當前正在運行的線程詳細信息,例如活動線程 , 排隊的線程和已完成的線程 。
當我殺死ExecutorService
, ExecutorService
殺死了,但是線程在后台運行。 因此,在終止ExecutorService之前,我需要獲取ExecutorService
形式的線程對象,並使用循環或迭代器手動ExecutorService
線程。
例如:
ExecutorService有5個線程。
每個線程都由invokeall()執行。 每個線程將在一小時后結束。
但是,我需要在15分鍾內通過向服務器發送新請求或調用某種方法來停止操作。
這里shutdown或shutdowNow停止執行程序,但不停止這5個線程。 那就是問題所在。 所以我需要手動殺死那些線程。 如何殺死執行程序服務中手動附加的線程?
我找到了解決方案,所有線程都附加在Callable中,並使用ExecutorService調用Callable線程。 ExecutorService僅包含活動,隊列和已完成詳細信息的值。 執行后,結果將使用Future類獲取值。
現在,如果我想在完成之前停止執行。 我需要調用可調用對象並轉換為線程對象,如果線程不為null,則手動停止。 因此,Callable對象也更改為全局變量。 最終執行刪除那些對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.