[英]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.