我有ThreadPoolTaskExecutor的以下配置
<bean id="threadPoolTaskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<property name="corePoolSize" value="10" />
<property name="maxPoolSize" value="25" />
<property name="queueCapacity" value="30" />
</bean>
我的公共类AdminService中有2个方法。
如何将ThreadPoolTaskExecutor插入triggerJob方法,以便在第一个方法中调用executeSql时创建新线程。
在inside triggerjob中,我有基于条件调用executeSql的循环。
我是否需要创建一个实现runnable的私有类,以便ThreadPoolTaskExecutor可以执行此类,还是可以创建没有runnable的线程?
我的想法是这样的
@Autowired
ThreadPoolTaskExecutor threadPoolTaskExecutor;
void triggerJob(){
for( Object k:Objects){
if(k.equals(something){
//here new thread to be created somehow
threadPoolTaskExecutor.execute(executeSql(k.getSql())
}
}
}
答案 0 :(得分:1)
如果必须这样做,可以使用org.springframework.core.task.SimpleAsyncTaskExecutor
:
<bean id="simpleTaskExecutor" class="org.springframework.core.task.SimpleAsyncTaskExecutor">
<property name="concurrencyLimit" value="25" />
</bean>
但是创建Java线程很昂贵。通常建议重用线程,甚至SimpleAsyncTaskExecutor docs说:
注意:此实现不会重用线程!请考虑使用线程池TaskExecutor实现,尤其是执行大量短期任务。