Java - 线程池

时间:2013-04-25 08:53:17

标签: java scheduled-tasks threadpool threadpoolexecutor

我的预定线程池--->

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小时才开始?

我无能为力,期待一些指示。请帮助我。

2 个答案:

答案 0 :(得分:3)

这是因为你在执行者中有单个线程。

Executors.newScheduledThreadPool(1);

导致第二个Runnable等到第一个Runnable完成。

尝试使用两个线程:

Executors.newScheduledThreadPool(2);

答案 1 :(得分:3)

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