我的预定线程池--->
private static ScheduledExecutorService pendingCheckScheduler = Executors.newScheduledThreadPool(1);
线程1 --->
private ScheduledFuture<?> pendingTranStatusCheckHandle=pendingCheckScheduler.scheduleAtFixedRate(new PendingTranStatusCheck(),0,checkForPendingTrans,TimeUnit.SECONDS );
线程2 ---&GT;
private ScheduledFuture<?> forcibleBatchCloseHandle=pendingCheckScheduler.schedule(new ForcibleBatchClose(), waitForPendingTrans, TimeUnit.MINUTES);
Thread 1
每10秒执行一次。Thread 2
应该在30分钟后启动。
Thread 1
的行为符合预期,其中Thread2
预计在30分钟后启动,并在1小时后开始。
thread1
中的延迟是否会导致此问题?如果是这样,当线程1完成考虑我们在线程池中只有一个线程时,thread2
应该是givcen优先级。为什么{{1拉伸太长时间后1小时才开始?
我无能为力,期待一些指示。请帮助我。
答案 0 :(得分:3)
这是因为你在执行者中有单个线程。
Executors.newScheduledThreadPool(1);
导致第二个Runnable等到第一个Runnable完成。
尝试使用两个线程:
Executors.newScheduledThreadPool(2);
答案 1 :(得分:3)
您的概念略有偏差,这会抵消您的结论。您有一个线程,并且计划在该一个线程上运行两个任务。因此,如果重复的任务执行了很长时间,占用线程,你肯定会受到干扰。