4

我有一个TimerTask,旨在以特定时间间隔收集指标。但是,任务执行的周期可能小于任务执行的时间(有时如果某些事情超时并被延迟)。

有没有办法在不等待前一个任务完成的情况下同时执行多个 TimerTasks 或 Runnables、线程等?

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

谢谢。

4

2 回答 2

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

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

于 2013-07-24T13:46:00.373 回答
0

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

于 2013-08-06T15:00:31.707 回答