4
我正在玩ScheduledExecutorService
。我想要做的是開始一個簡單的代碼(每秒一個tick),並在稍後(五秒鐘後)安排另一個任務,取消第一個任務。然後阻止主線程直到所有內容完成,這應該在兩個任務完成後(+ - 五秒)完成。如何從其他任務取消ScheduledFuture任務並正常結束?
這是我的代碼:
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);
這suprises我的問題是,它會阻止彷彿仍有一些正在運行的任務。爲什麼? cancelTask
應該立即結束,scheduledTickTask
剛剛取消,那麼問題是什麼?
感謝您的回答,這是Javadoc中一個簡單的筆記,我錯過了。有沒有辦法自動取消最後一項任務後如何關閉調度程序?或者你將不得不在某個地方保留一個櫃檯並在它等於零後關閉? – voho
@voho我不知道這是否可以使用'ScheduledExecutorService'。看看[這個問題](http://stackoverflow.com/q/23369952/1743880)。 – Tunaki