Согласно документу для метода shutdownNow
(ExecutorService)
There are no guarantees beyond best-effort attempts to stop
processing actively executing tasks. For example, typical
implementations will cancel via {@link Thread#interrupt}, so any
task that fails to respond to interrupts may never terminate
У меня есть следующий код:
public static void main(String[] args) throws InterruptedException {
ExecutorService service = Executors.newSingleThreadExecutor(r -> {
final Thread thread = new Thread(r);
thread.setDaemon(false);
return thread;
});
service.submit(() -> {
while (true) {
Thread.sleep(1000);
System.out.println("Done: " + Thread.currentThread().isInterrupted());
}
});
Thread.sleep(3000);
service.shutdownNow();
}
Это вывод:
Done: false
Done: false
После двух циклов выполнение останавливается.Как shutdownNow прерывает мою работу, у меня просто бесконечный цикл, нет проверки на Thread.currentThread.isInterrupted();
На мой взгляд, shutdownNow
вызывает только метод прерывания рабочего потока