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メソッドのすべての処理(エグゼキュータサービスによって新しいスレッドを生成することによって実行される)が終了するまで待機しますか?

スケジューラタスクのプールサイズ属性は、トリガーされたタスク内のロジックを実行または処理するためではなく、タスクをトリガーするためにのみ使用されますか。

4

1 に答える 1

1

に属するスレッドschedulerは、すべてのジョブを に送信しjobExecutorServiceます。それらのうち最大 64 個がすぐに実行を開始し、残りの最大 512 個がキューに入れられます。すべてが送信されるとすぐに (実行されずに)、init メソッドは終了します。これには数ミリ秒以上かかることはありません。

schedulerが同じでない場合jobExecutorService- XML の一部が欠落しているためわかりません - そのスレッドはジョブ ロジックの実行に使用されません。

于 2013-02-25T12:21:17.163 に答える