我看过很多关于使用 Runnable、TaskTimers、Timers、Threads 等的帖子,但它们看起来都一样。所以这是一个由两部分组成的问题:
如果我想每 x 秒将变量增加 n 一次,我想使用哪个? (我需要程序的其余部分不间断地运行!)
我为什么要使用它?
最佳答案
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 实际上使用操作系统调度服务(如果有),并保证在正确的时刻以高优先级启动线程,因此所有其他线程(如果需要)将被搁置。
关于java - 线程、定时器、等等来递增变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20302472/