2013-04-25 100 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