首页 文章

spring ThreadPoolTaskExecutorto在每个方法调用上创建新线程

提问于
浏览
1

我有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个方法 .

  • void triggerJob();

  • boolean executeSql(String sql);

我如何将ThreadPoolTaskExecutor插入triggerJob方法,以便在第一个方法中调用executeSql时创建新线程 .

在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())
               }
           }
        }

1 回答

  • 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实现,尤其是执行大量短期任务 .

相关问题