public ScheduledFuture<?> executeTaskWithDelay(String name,
final Runnable runnable, Period delay, boolean isDaemon) {
ScheduledExecutorService executorService =
Executors.newSingleThreadScheduledExecutor(new DefaultThreadFactory(
name, isDaemon));
ScheduledFuture<?> future = executorService.schedule(runnable,
delay.toStandardDuration().getMillis(), TimeUnit.MILLISECONDS);
executorService.shutdown();
return future;
}
Когда я профилировал приложение, я заметил, что запланированные потоки, созданные этим методом, всегда находятся в состоянии «Выполняется», а не в состоянии «Ожидание». ", прежде чем они будут казнены. Если я удаляю executorService.shutdown(), он делает то, что я хочу (т.е. потоки остаются в состоянии ожидания, пока не наступит время их запуска). Однако без executorService.shutdown() потоки, отличные от Daemon, никогда не удаляются сборщиком мусора после выполнения. Есть ли способ убедиться, что потоки всегда находятся в состоянии ожидания перед выполнением? или какую другую замену я могу использовать для этого метода, чтобы гарантировать, что: