[英]Is there a way to cancel and reuse an ExecutorService?
我正在編寫一個 Java Fractal Explorer,分形計算是多線程完成的。 以前,我只是創建了一堆線程(與系統有處理器內核一樣多)並將它們保存在一個數組中,但這會導致一些問題並且不是很優雅,現在我想切換到Executors。
我需要的功能是:
我的問題是 Java ExecutorService(我使用 Executors.newFixedThreadPool())在調用 shutdownNow()(取消)后提交新任務時拋出異常。 我當然可以只創建一個新的 ExecutorService,但隨后必須再次創建所有線程,據我所知,這非常昂貴(這是使用線程池的全部意義)。
所以基本上我需要的是一個使用線程池的 ExecutorService 實現,它可以在不關閉的情況下被取消,所以它可以被重用。
已經有這樣的東西還是我必須自己寫? (不會太難吧?;))
我當前的代碼可以在https://github.com/lucaswerkmeister/JFractalizer找到。
提前致謝,
盧卡斯
PS:當使用執行器時,我會將圖像分割成比線程數更多的部分,所以如果一個部分完成得更快,線程不會空閑,而是可以繼續處理圖像的另一部分。 盡管如此,如果所有部分都並行計算,而不是某些部分比其他部分開始計算,那將會很酷,但這只是一個獎勵。
當您完成ExecutorService
並且不打算向其提交新任務時,您應該使用ExecutorService.html#shutdownNow()
。
如果您想繼續使用相同的ExecutorService
,您應該取消單個任務。
方法ExecutorService.html#submit
返回可用於取消執行和/或等待完成的Future
。
您的任務應該能夠處理中斷。 所以你可以通過中斷它們來取消任務。
boolean flag = Thread.interrupted();
if(flag == true )
throw new InterruptedException();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.