2013-02-25 233 views
0

我使用調用類的方法固定時間間隔後像下面任務計劃在春季

<task:scheduled-tasks scheduler="scheduler"> 
<task:scheduled ref="processScheduledJobs" method="init" fixed-delay=5000/> 

一旦調度觸發init方法春季調度任務。 init方法將使用線程池執行器來執行隊列中的所有作業。

<bean id="processScheduledJobs" class="XXXX.VV.ProcessScheduledJobs"> 
<property name="pool" ref="jobExecutorService"" /> 
</bean> 

<bean id="scheduler" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor"> 
    <property name="threadFactory"> 
     <bean class="XXX..VVV.NamingThreadFactory"> 
      <constructor-arg value="thread" /> 
     </bean> 
    </property> 
    <property name="corePoolSize" value="16" /> 
    <property name="maxPoolSize" value="64" /> 
    <property name="keepAliveSeconds" value="4" /> 
    <property name="queueCapacity" value="512" /> 
</bean> 

問題: 是執行init方法等到所有處理的初始線程(通過執行服務提供了通過生成新線程)在init方法完成?

調度程序任務的池大小屬性是否僅用於觸發不執行或處理觸發任務內邏輯的任務。

回答

1

屬於scheduler的線程將提交所有工作到jobExecutorService。其中最多64個將立即開始執行,其餘的最多512個將最終排隊。只要所有提交 - 不執行 - init方法將退出。這不應該花費比毫秒更長的時間。

如果schedulerjobExecutorService不一樣 - 我不能說這是因爲你的xml的一部分丟失了 - 它的線程將不會用於執行作業邏輯。

+0

謝謝..更新爲錯字 - 調度程序是一樣的以上提到..與你回答清楚,我的主線程將退出一旦它提交所有的工作。因爲我們已經定義了固定的延遲,所以在提到時間之後應該再次執行另一個線程。對?是的,在那種情況下,調度程序將如何運作。會有新的實例,還是會使用相同的實例並將作業添加到該實例中。 – Ashu 2013-02-25 18:03:55

+0

它將繼續重用'scheduler' bean,同樣的64個線程將會每5秒提交一次新作業。 – mrembisz 2013-02-25 21:30:42