package util.concurrent;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
public class ShutdownDemo {
public static void main(String[] args) throws InterruptedException{
ExecutorService executor = Executors.newSingleThreadExecutor();
executor.execute(new Runnable(){
@Override
public void run() {
while(true){
System.out.println("-- test --");
}
}
});
TimeUnit.SECONDS.sleep(3);
executor.shutdownNow();
}
}
我已經調用了shutdownNow方法,爲什麼控制檯繼續打印「 - test - 」??爲什麼ExecutorService.shutdownNow方法不能停止線程
這被誇大了。您的狀態變量與已由Thread.interrupted提供的狀態變量沒有區別。它的行爲方式完全相同。雖然你可以編寫代碼來確保shutdownNow()不會完成 - 這是作者的錯誤 - 如果你遵循規則,我說它最終會關閉。網絡調用最終會超時,但在那段時間沒有過期的情況下,線程將不得不等待,直到超時異常被拋出。對於共享狀態變量也是如此。 – chubbsondubs 2013-08-24 21:13:03