我想每隔几毫秒安排一次任务,我知道Timers,Executors等等。我发现这种方法最准确。但我只是想知道我的方式对于(大)程序来说可能太重了吗?
new Thread(() -> {
long time = System.currentTimeMillis();
while (true) {
if (System.currentTimeMillis() - time >= 1000) {
// Scheduled task
System.out.println(new SimpleDateFormat("HH:mm:ss:SSS").format(new Date(System.currentTimeMillis())));
time = System.currentTimeMillis();
}
}
}).start();
答案 0 :(得分:0)
您的方法为每个重复性任务创建一个新线程。每个线程都需要分配整个堆栈。因此,您的方法的内存消耗比它需要的大很多。如果您创建足够的这些计时器线程,这可能会成为一个问题。
如果您将要执行大量这些任务,最好使用java.util.Timer和TimerTasks。
顺便提一下,正如所写,您的任务时间会漂移,因为在触发任务和重置time
变量之间偶尔会有额外的毫秒或更长时间。但是,这可以在您的代码中修复。