簡體   English   中英

在Java中:如何在不等待使用ExecutorService完成作業的情況下終止所有線程的執行?

[英]in java: how can i terminate execution of all threads without waiting for them to finish their jobs using ExecutorService?

我有以下代碼,其中executor是ExecutorService類型:

Runnable worker = new MyRunnable(x, y, p);
                executor.execute(worker);

當一個數字打印p次時,我希望所有線程的執行干凈地終止,而不必等待其他線程完成其工作。 我怎樣才能做到這一點?

您不能干凈地終止線程,就像在MS DOS時代一樣,您不能干凈地終止程序。 原因是在線程級別沒有等效的進程間隔離,它們都共享相同的地址空間和其他資源。

您唯一的選擇是基於線程中斷顯式實現協作協議,這將使線程自己退出正在執行的操作並結束。

為此嘗試executor.shutdownNow() 但是,正如ExecutorService Javadoc中所述,

除了盡最大努力嘗試停止處理正在執行的任務之外,沒有任何保證。 例如,典型的實現將通過Thread.interrupt()取消,因此任何無法響應中斷的任務都可能永遠不會終止。

http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html#shutdownNow%28%29

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM