0G0*_*0G0 5 java concurrency multithreading scheduling timer
我有一个TimerTask,旨在以特定时间间隔收集指标。但是,任务执行的周期可能小于任务执行的时间(偶尔会出现超时并延迟的情况)。
有没有办法同时执行多个TimerTasks或Runnables、线程等,而不需要等待前一个任务完成?
我知道Timer使用单线程,ScheduledThreadPoolExecutor无论速率如何都会延迟执行。
谢谢。
我建议您使用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)
这样,您就可以在一段时间内安排任务,并且它们都将同时运行。