我看过许多关于使用Runnable,TaskTimers,Timers,Threads等的帖子,但它们都开始看起来一样。所以这是一个两部分的问题:
如果我想每x秒将变量增加一次n,我想使用哪个? (我需要我的程序的其余部分才能运行而不会跳过一个节拍!)
我为什么要用它?
答案 0 :(得分:1)
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1, new ThreadFactory() {
public Thread newThread(Runnable r) {
final Thread result = new Thread(r);
result.setPriority(Thread.MAX_PRIORITY);
return result;
}
});
executor.scheduleAtFixedRate(new TotallyImportantTask(), 0, 10, TimeUnit.SECONDS);
定时器不起作用,因为您无法设置实际的线程优先级,因此它可能会也可能不会运行,具体取决于实际负载。
线程不起作用,因为你需要在一个循环中调用Thread.sleep(x)
,并且不能保证它会在x秒后实际唤醒。根据操作系统和情况,时间可能略有不同或大不相同。
ScheduledExecutorService实际上使用OS调度服务(如果有的话),并保证在正确的时刻以高优先级启动线程,因此所有其他线程将(如果需要)被搁置。
答案 1 :(得分:0)
计时器方法: public void schedule(TimerTask任务, 日期firstTime, 长时间) 可能就是你想要的。