在Java中并发执行计划任务

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

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

我知道Timer使用单个线程,而ScheduledThreadPoolExecutor将延迟执行而不管速率如何。

谢谢。

我建议您使用Executors.newCachedThreadPool()newCachedThreadPool(ThreadFactory threadFactory)与您自己的线程工厂,与Timer一起使用。 所以代码看起来应该是这样的

 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); 

这样,您可以安排具有一段时间的任务,并且它们将同时运行。

使用任何Timer实现,包括ScheduledThreadPoolExecutor,但让你的计时器任务不执行你的业务逻辑,而是快速启动另一个任务(到一个缓存的线程池,或在它自己新创建的线程上),它实际上执行繁重的计算。