如果我的 Java ThreadPoolTaskExecutor 被调用的次数超过 "maxPoolSize" 设置会怎样?
What happens if my Java ThreadPoolTaskExecutor gets called more than the "maxPoolSize" setting?
我将 Java 6 与 Spring 3.2.11.RELEASE 和 JBoss 7.1.3.Final 一起使用。我的 Spring 应用程序上下文文件中有这个
<!-- Manages thirdparty threads -->
<bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<property name="threadFactory" ref="thirdpartyThreadFactory"/>
<property name="maxPoolSize" value=“10” />
<property name="corePoolSize" value=“5” />
</bean>
<bean id="thirdpartyThreadFactory" class="org.springframework.scheduling.concurrent.CustomizableThreadFactory">
<constructor-arg value="thirdparty-"/>
</bean>
我的问题是,如果我根据上述设置调用 taskExecutor 的 execute 方法 300 次,当前 10 个线程排队时,其他 290 个线程会发生什么情况?它们会被丢弃还是一次只执行 10 个线程?
maxPoolSize
定义最大并发线程数运行。因此,如果您提交的任务多于该数量,它们将根据队列设置进行排队(例如,您可以通过调用 setQueueCapacity()
来限制队列大小)。
maxPoolSize 只定义可以同时运行 的线程数。因此,它限制了您的代码将生成的线程数。其余任务不会被丢弃,而是在队列中,并在线程释放后立即执行。
例如。如果您将 maxPoolSize 设置为 1,那么所有任务都将按顺序执行。
在您的情况下,一批 10 个,具体取决于每个任务所花费的时间。
我将 Java 6 与 Spring 3.2.11.RELEASE 和 JBoss 7.1.3.Final 一起使用。我的 Spring 应用程序上下文文件中有这个
<!-- Manages thirdparty threads -->
<bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<property name="threadFactory" ref="thirdpartyThreadFactory"/>
<property name="maxPoolSize" value=“10” />
<property name="corePoolSize" value=“5” />
</bean>
<bean id="thirdpartyThreadFactory" class="org.springframework.scheduling.concurrent.CustomizableThreadFactory">
<constructor-arg value="thirdparty-"/>
</bean>
我的问题是,如果我根据上述设置调用 taskExecutor 的 execute 方法 300 次,当前 10 个线程排队时,其他 290 个线程会发生什么情况?它们会被丢弃还是一次只执行 10 个线程?
maxPoolSize
定义最大并发线程数运行。因此,如果您提交的任务多于该数量,它们将根据队列设置进行排队(例如,您可以通过调用 setQueueCapacity()
来限制队列大小)。
maxPoolSize 只定义可以同时运行 的线程数。因此,它限制了您的代码将生成的线程数。其余任务不会被丢弃,而是在队列中,并在线程释放后立即执行。
例如。如果您将 maxPoolSize 设置为 1,那么所有任务都将按顺序执行。 在您的情况下,一批 10 个,具体取决于每个任务所花费的时间。