多线程步骤运行太多的线程



我有一个具有最大线程限制10;

的多线程步骤
private static final int THREAD_NUMBER = 10;
@Bean
public TaskExecutor taskExecutor(){
    SimpleAsyncTaskExecutor simpleAsyncTaskExecutor = new SimpleAsyncTaskExecutor("batch-thread");
    simpleAsyncTaskExecutor.setConcurrencyLimit(THREAD_NUMBER);
    return simpleAsyncTaskExecutor;
}

@Bean
protected Tasklet readHeader() {
    EkuampVorsatzReader ekuampVorsatzReader = new EkuampVorsatzReader();
    return ekuampVorsatzReader;
}
@Bean
public Step stepGetPriceFileHeader(){
    return stepBuilderFactory.get("batch-job_price_file-step-get-pricefile-header").tasklet(readHeader()).build();
}
@Bean
public Step stepGetPriceFileData() {
    return stepBuilderFactory.get("batch-job_price_file-step-get-pricefile-data")
            .<ImportLogEntity, ImportLogEntity>chunk(50)
            .reader(priceFileReader).listener(priceFileReaderListener)
            .writer(priceFileWriter)
            .listener(priceFileStepListener)
            .taskExecutor(taskExecutor())
            .throttleLimit(THREAD_NUMBER)
            .build();
}
@Bean
public Job batchJobPriceFile() {
    Job job = jobBuilderFactory.get("batch-job_price_file")
            .start(stepGetPriceFileHeader())
            .next(stepGetPriceFileData())
            .listener(jobExecutionListener)
            .build();
    return job;
}

处理了200万个记录文件后,我可以在日志文件中看到,这些线程创建了太多线程,即使我将限制设置为10个线程。例如:信息[批处理35348]你能告诉我为什么吗?谢谢。

2019-07-02T17:02:29,896 8129857信息[batch-thread35348] com.db.wmdl.pricefile.job.batch.listener.listener.pricefilereadereaderleaderleaderlistener([]( 2019-07-02T17:02:30,147 8130108 INFO [batch-Thread35341] com.db.wmdl.pricefile.job.job.batch.listener.pricefilewriterlisterlisterlisterlistener([](列表大小:50 2019-07-02T17:02:30,191 8130152信息[batch-thread35343] com.db.wmdl.pricefile.job.batch.listener.pricefilewriterliterlisterlisterlisterlistener([](列表大小:50 2019-07-02T17:02:30,219 8130180信息[batch-thread35342] com.db.wmdl.pricefile.job.job.batch.listener.pricefilewriterliterlisterlisterlisterlistener([](列表大小:50 2019-07-02T17:02:30,340 8130301信息[batch-thread35344] com.db.wmdl.pricefile.job.job.batch.listener.pricefilewriterlisterlisterlisterlistener([](列表大小:50 2019-07-02T17:02:30,504 8130465信息[batch-thread35345] com.db.wmdl.pricefile.job.job.job.batch.listener.pricefilewriterlisterlisterlisterlistener([](列表大小:50 2019-07-02T17:02:30,513 8130474信息[batch-thread35349] com.db.wmdl.pricefile.job.batch.listener.pricefilerereaderleaderlisterlistener([]( 2019-07-02T17:02:30,513 8130474 INFO [batch-Thread35350] com.db.wmdl.pricefile.job.job.batch.listener.pricefilereareaderleaderlisterlistener([]( 2019-07-02T17:02:30,513 8130474 INFO [batch-Thread35351] com.db.wmdl.pricefile.job.batch.listener.pricefilerereaderleaderlisterlistener([]( 2019-07-02T17:02:30,513 8130474信息[batch-thread35352] com.db.wmdl.pricefile.job.batch.listener.pricefilerereaderleaderlisterlistener([]( 2019-07-02T17:02:30,513 8130474 INFO [batch-Thread35354] com.db.wmdl.pricefile.job.batch.listener.pricefilerereaderleaderlisterlistener([]( 2019-07-02T17:02:30,513 8130474信息[batch-thread35353] com.db.wmdl.pricefile.job.job.batch.listener.pricefilerereaderleaderlisterlistener([]( 2019-07-02T17:02:30,513 8130474信息[batch-thread35355] com.db.wmdl.pricefile.job.job.batch.listener.pricefilereareaderleaderlisterlistener([]( 2019-07-02T17:02:30,586 8130547信息[QUARTZSCHEDULER_WORKER-1] com.db.wmdl.pricefile.job.job.batch.listener.pricefilejoblistener([]( - 执行-ID:21]导入已完成

SimpleAsyncTaskExecutor不重用线程。这是其Javadoc的摘录:

注意:此实现不会重复使用线程!考虑使用线程taskexecutor实现,特别是用于执行大量短期任务。

在您的情况下,您可以使用ThreadPoolTaskExecutor并将其maxPoolSize设置为10。

最新更新