在Java中并发执行计划任务

时间:2013-07-23 23:15:52

标签: java multithreading concurrency timer scheduling

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

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

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

感谢。

2 个答案:

答案 0 :(得分:2)

我建议您使用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);

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

答案 1 :(得分:0)

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