2013-04-25 101 views
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表现如预期那样,预计在30分钟后开始的Thread2在1小时后开始。

是否在thread1延迟是造成这个问题吗?如果是这样,thread2是应该givcen当线程1点结束考虑到我们有螺纹pool.Why Thread2只有一个线程被拉伸过长后1小时开始优先?

我很笨,期待一些指针。请帮助我。

+0

你应该使用代码块代码。排除“线程1 - >”使其成为评论的东西。另外一个换行符可以帮助提高可读性。 – luksch 2013-04-25 08:58:43

+0

好的,我会按照你的指示在我的下一篇文章中。不知何故,我忘了。 – sskumar86 2013-04-25 10:43:02

回答

3

你的概念是稍微偏离,从而抵消你的结论。您一共有一个线程,以及两个任务预定在该一个线程上运行。因此,如果重复任务执行很长一段时间,占用线程,则可以肯定地预期会产生干扰。

3

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

Executors.newScheduledThreadPool(1); 

它导致第二次Runnable等待,直到第一次Runnable结束。

尝试使用两个线程:

Executors.newScheduledThreadPool(2); 
+0

谢谢..如果第二个可运行的程序正在等待,应该等待多长时间?是否有可能第二个可运行的等待程序将在某个时间到期? – sskumar86 2013-04-25 10:11:43

+0

第二个Runnable不会过期,并且将等待线程变为空闲状态(第一个Runnable结束)。 – 2013-04-25 10:48:13