Dav*_*ave 5 queue spring multithreading threadpool threadpoolexecutor
我正在使用Spring 4.3.8.RELEASE和Java 7.我想创建一个线程池来执行任务,所以我在Spring consxet中设置了以下内容
<bean id="myThreadFactory" class="org.springframework.scheduling.concurrent.CustomizableThreadFactory">
<constructor-arg value="mythread-"/>
</bean>
<bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<property name="threadFactory" ref="myThreadFactory"/>
<property name="corePoolSize" value="10" />
<property name="maxPoolSize" value="50" />
</bean>
Run Code Online (Sandbox Code Playgroud)
为了不破坏机器的CPU使用率,我想限制系统中可能存在的并发线程数量(我假设这是maxPOolSize所做的).但我不希望任务被丢弃.如果我向taskPoolExecutor添加了50多个任务,51号会发生什么?更重要的是,在开始被删除之前可以添加的默认任务数是多少?
kew*_*wne 14
maxPoolSize隐式设置允许删除任务.但是,默认队列容量是Integer.MAX_VALUE,实际上,它是无穷大.
需要注意的是ThreadPoolTaskExecutor使用ThreadPoolExecutor底层,这有一种不同寻常的排队方法,在文档中有描述:
如果
corePoolSize正在运行或多个线程,则执行程序总是更喜欢排队请求而不是添加新线程.
这意味着maxPoolSize仅在队列已满时才相关,否则线程数将永远不会增长corePoolSize.例如,如果我们提交永远不会完成到线程池的任务:
corePoolSize提交将每个开始一个新的线程;maxPoolSize;| 归档时间: |
|
| 查看次数: |
10348 次 |
| 最近记录: |