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();
}
}
Tôi đã viện dẫn phương thức shutdownNow, tại sao bàn điều khiển tiếp tục in "- test -" ??Tại sao ExecutorService.shutdownNow method không thể dừng thread
Điều này được phóng đại. Biến trạng thái của bạn không khác với biến trạng thái đã được cung cấp bởi Thread.interrupted. Nó sẽ hành xử theo cùng một cách chính xác. Trong khi bạn có thể viết mã mà sẽ đảm bảo một shutdownNow() sẽ không hoàn thành - đó là lỗi của tác giả - nếu bạn làm theo các quy tắc tôi tuyên bố nó sẽ tắt máy cuối cùng. Các cuộc gọi mạng cuối cùng hết thời gian chờ, nhưng trong khi thời gian đó không hết hạn, luồng sẽ phải chờ cho đến khi hết thời gian chờ. Điều này cũng đúng cho một biến trạng thái chia sẻ. – chubbsondubs