【发布时间】:2015-12-20 20:24:45
【问题描述】:
我在玩ScheduledExecutorService。我想要做的是启动一个简单的ticker(每秒一个tick)并稍后安排另一个任务(五秒后)取消第一个任务。然后阻塞主线程直到一切都完成,这应该是在两个任务完成之后(+- 5 秒)。
这是我的代码:
ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
Runnable tickTask = () -> System.out.println("Tick");
ScheduledFuture<?> scheduledTickTask = executor.scheduleAtFixedRate(tickTask, 0, 1, TimeUnit.SECONDS);
Runnable cancelTask = () -> scheduledTickTask.cancel(true);
executor.schedule(cancelTask, 5, TimeUnit.SECONDS);
executor.awaitTermination(Long.MAX_VALUE, TimeUnit.DAYS);
让我吃惊的问题是它会阻塞,就好像还有一些正在运行的任务一样。为什么? cancelTask 应该立即结束,而 scheduledTickTask 刚刚取消,那么问题出在哪里?
【问题讨论】:
标签: java multithreading java-8 scheduled-tasks scheduledexecutorservice