gpt4 book ai didi

java - 为什么 TimerTask 不能重用到另一个计时器中,但已经使用的 TimerTask 可以重用到 ScheduledExecutorService 中

转载 作者:行者123 更新时间:2023-12-02 05:57:26 27 4
gpt4 key购买 nike

在下面的代码中,注释掉的部分会导致异常,该异常向我们解释了 timerTask2 已经被调度或取消,但是没有什么可以阻止 if 被执行器在下面的代码中重用和运行注释掉了部分。怎么解释呢?

Timer timer2 = new Timer();
TimerTask timerTask2 = new ThreadTest6();
delay = 1000 L;
long period = 1000 L;
timer2.scheduleAtFixedRate(timerTask2, delay, period);

try {
Thread.sleep(10500);
} catch (InterruptedException e) {
e.printStackTrace();
}

timer2.purge();
timer2.cancel();
timerTask2.cancel();

// Timer timer3=new Timer();
// System.out.println("Task reuse");
// System.out.println();
//
// timer3.scheduleAtFixedRate(timerTask2, delay, period);
//
// try {
// Thread.sleep(1500);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
//

System.out.println("At the executor service");
System.out.println();

ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
delay = 1000 L;
period = 1000 L;
executor.scheduleAtFixedRate(timerTask2, delay, period, TimeUnit.MILLISECONDS);
try {
Thread.sleep(delay + period * 3);
} catch (InterruptedException e) {
e.printStackTrace();
}
executor.shutdown();

最佳答案

@Slaw 回答为:

因为 Timer 检查 TimerTask 是否已被取消(即此行为特定于 Timer)。对于 ScheduledExecutorService 来说,TimerTask 只是一个 Runnable

关于java - 为什么 TimerTask 不能重用到另一个计时器中,但已经使用的 TimerTask 可以重用到 ScheduledExecutorService 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55999775/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com