У меня есть запланированная задача в моей программе, которая закрывает кадр по истечении заданного периода времени. Однако после выполнения задачи программа продолжает работать, как будто ScheduledExecutorService
все еще работает в другом потоке.ScheduledExecutorService - программа, не заканчивающаяся после однократного действия
Это соответствующая часть моего кода:
int delay = 1000;
ScheduledExecutorService ex = Executors.newSingleThreadScheduledExecutor();
ex.schedule(() -> {
System.out.println("executed");
getWindow().closeWindow();
// ex.shutdown();
}, delay, TimeUnit.MILLISECONDS);
Здесь задача выполняется после секундной задержки 1 «выполнена» печатается один раз, кадр закрывается, и программа продолжает работать даже после того, как это код. Если я раскомментирую ex.shutdownNow();
, программа завершится успешно. Однако я не могу понять, почему это происходит. Я также не смог найти что-либо из остальной части Интернета.
MCVE:
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class Main {
public static void main(String[] args) {
int delay = 1000;
ScheduledExecutorService ex = Executors.newSingleThreadScheduledExecutor();
ex.schedule(() -> {
System.out.println("executed");
// ex.shutdown();
}, delay, TimeUnit.MILLISECONDS);
}
}
The лямбды, возможно, уже раздали, но это на самом деле Java 8.
Почему программа не останавливается после выполнения задачи была выполнена ?
Вы должны вызвать' выключения() ' после выполнения всех задач, а не 'shutdownNow()'. Это соответствует [ExecutorSErvice API] (http://docs.oracle.com/javase/8/docs/api/java/util/concurrent /ExecutorService.html) –
@HovercraftFullOfEels Ах, да, я знаю. Это не имеет значения. Не обращайте на это внимания :) Я отредактирую его там nyhoo ~ –
Но вызов 'shutdown()' ** не ** не имеет значения, и ваш код ему нужен. –