我正在使用计时器任务以固定的时间间隔执行asynctask,时间为五分钟。但计时器任务有时会开始行为不端,就像它没有得到的那样 实际上,在固定延迟时间后,它会在10分钟后执行两次,而不是每5分钟执行一次,为什么会这样?
这是我的代码
Timer timer = new Timer();
mytimer Mytimer = new mytimer();
timer.scheduleAtFixedRate(Mytimer, 300000, 300000);
class Mytimer extends TimerTask {
@Override
public void run() {
// TODO Auto-generated method stub
new DetailPosition().execute();
}
}
请帮助我
答案 0 :(得分:2)
如果计时器任务是在所有线程都在使用的线程池上调度的,那么它必须等待一个线程在运行任务之前可用。
考虑以下内容 -
ScheduledExecutorService ses = Executors.newSingleThreadScheduledExecutor();
ses.scheduleAtFixedRate(() -> {Thread.sleep(500); System.out.println(new Date());}, 0, 200, TimeUnit.MILLISECONDS);
此处任务所需的时间比间隔长,因此任务将排队,直到内存不足为止。