В простых java приложениях ExecutorServices необходимо завершить, чтобы приложение завершилось, например:
public static void main(String[] args) throws StoreException {
final ExecutorService executorService = Executors.newSingleThreadExecutor();
executorService
.submit((Callable<Void>) () -> {
Thread.sleep(2000);
System.out.println("parallel");
return null;
});
// JVM does not shutdown unless calling executorService.shutDown()
// executorService.shutDown();
}
Также см. Причина вызова shutdown () для ExecutorService
Так что же происходит в серверном приложении (например, с использованием Spring), если какой-либо класс создает повторяющуюся задачу, подобную этой:
public class MyClass {
public MyClass() {
ScheduledExecutorService scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
scheduledExecutorService
.scheduleAtFixedRate(() -> {
System.out.println("parallel");
}, 2000, 2000, TimeUnit.SECONDS);
}
}
Должен ли я связать завершение shutdownExecutorService при завершении работы приложения ? Или, скорее, должны использовать средства планирования Springs?
Что, если ExecutorService является Spring Bean?