0

我正在使用spring调度程序任务在固定间隔后调用类中的方法,如下所示

<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 回答