Java中定时任务的并发执行

0G0*_*0G0 5 java concurrency multithreading scheduling timer

我有一个TimerTask,旨在以特定时间间隔收集指标。但是,任务执行的周期可能小于任务执行的时间(偶尔会出现超时并延迟的情况)。

有没有办法同时执行多个TimerTasks或Runnables、线程等,而不需要等待前一个任务完成?

我知道Timer使用单线程,ScheduledThreadPoolExecutor无论速率如何都会延迟执行。

谢谢。

Des*_*ert 2

我建议您使用Executors.newCachedThreadPool()newCachedThreadPool(ThreadFactory threadFactory)使用您自己的线程工厂,并与计时器结合使用。所以代码应该是这样的

Executor executor = Executors.newCachedThreadPool();
Timer time = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {

    public void run() {
        executor.execute(new Runnable() {

             public void run() {
                  //your business logic
             }
        });
    }
}, delay, period);
Run Code Online (Sandbox Code Playgroud)

这样,您就可以在一段时间内安排任务,并且它们都将同时运行。