使用Java线程作为任务sheduler,

时间:2017-06-09 23:41:21

标签: java multithreading scheduler

我想每隔几毫秒安排一次任务,我知道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();

1 个答案:

答案 0 :(得分:0)

您的方法为每个重复性任务创建一个新线程。每个线程都需要分配整个堆栈。因此,您的方法的内存消耗比它需要的大很多。如果您创建足够的这些计时器线程,这可能会成为一个问题。

如果您将要执行大量这些任务,最好使用java.util.Timer和TimerTasks。

顺便提一下,正如所写,您的任务时间会漂移,因为在触发任务和重置time变量之间偶尔会有额外的毫秒或更长时间。但是,这可以在您的代码中修复。