0

我的预定线程池--->

private static ScheduledExecutorService pendingCheckScheduler = Executors.newScheduledThreadPool(1);

线程 1--->

private ScheduledFuture<?> pendingTranStatusCheckHandle=pendingCheckScheduler.scheduleAtFixedRate(new PendingTranStatusCheck(),0,checkForPendingTrans,TimeUnit.SECONDS );

线程2--->

private ScheduledFuture<?> forcibleBatchCloseHandle=pendingCheckScheduler.schedule(new ForcibleBatchClose(), waitForPendingTrans, TimeUnit.MINUTES);

Thread 1每 10 秒执行一次。Thread 2应该在 30 分钟后开始。

Thread 1行为与预期一样Thread2,预计在 30 分钟后开始,在 1 小时后开始。

延迟thread1是否导致了这个问题?如果是这样,thread2考虑到我们在线程池中只有一个线程,当线程 1 完成时应该给予优先级。为什么Thread2在 1 小时后启动时间过长?

我一无所知,期待一些指示。请帮助我。

4

2 回答 2

3

这是因为您在执行程序中有单线程。

Executors.newScheduledThreadPool(1);

它会导致第二个 Runnable 等待,直到第一个 Runnable 完成。

尝试使用两个线程:

Executors.newScheduledThreadPool(2);
于 2013-04-25T08:58:21.887 回答
3

您的概念略有偏差,这抵消了您的结论。您总共有一个线程,并且计划在该线程上运行两个任务。因此,如果重复任务执行很长时间,占用线程,您肯定可以预料到干扰。

于 2013-04-25T08:58:55.343 回答