当前位置: 首页 > 知识库问答 >
问题:

太多线程在多线程步骤中运行

章晋鹏
2023-03-14

我创建了一个多线程步骤,最大线程限制为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())
            .html" target="_blank">listener(jobExecutionListener)
            .build();
    return job;
}

在处理了200万条记录文件后,我可以在日志文件中看到创建的线程太多,即使我将限制设置为10个线程。你能告诉我为什么吗?非常感谢。

2019-07-02T17:02:298968129857信息[batch-thread35348]com。db。wmdl。价格档案。工作一批听众。PriceFileReaderListener([])-PriceFileReaderListener-阅读2019-07-02T17:02:30147 8130108信息之前[batch-thread35341]com。db。wmdl。价格档案。工作一批听众。PriceFileWriterListener([])-PriceFileWriterListener-afterWrite;列表大小:50 2019-07-02T17:02:30191 8130152信息[batch-thread35343]com。db。wmdl。价格档案。工作一批听众。PriceFileWriterListener([])-PriceFileWriterListener-afterWrite;列表大小:50 2019-07-02T17:02:30219 8130180信息[batch-thread35342]com。db。wmdl。价格档案。工作一批听众。PriceFileWriterListener([])-PriceFileWriterListener-afterWrite;列表大小:50 2019-07-02T17:02:30340 8130301信息[batch-thread35344]com。db。wmdl。价格档案。工作一批听众。PriceFileWriterListener([])-PriceFileWriterListener-afterWrite;列表大小:50 2019-07-02T17:02:30504 8130465信息[batch-thread35345]com。db。wmdl。价格档案。工作一批听众。PriceFileWriterListener([])-PriceFileWriterListener-afterWrite;列表大小:50 2019-07-02T17:02:30513 8130474信息[batch-thread35349]com。db。wmdl。价格档案。工作一批听众。PriceFileReaderListener([])-PriceFileReaderListener-阅读2019-07-02T17:02:30513 8130474信息之前[batch-thread35350]com。db。wmdl。价格档案。工作一批听众。PriceFileReaderListener([])-PriceFileReaderListener-阅读2019-07-02T17:02:30513 8130474信息之前[batch-thread35351]com。db。wmdl。价格档案。工作一批听众。PriceFileReaderListener([])-PriceFileReaderListener-阅读2019-07-02T17:02:30513 8130474信息之前[batch-thread35352]com。db。wmdl。价格档案。工作一批听众。PriceFileReaderListener([])-PriceFileReaderListener-阅读2019-07-02T17:02:30513 8130474信息之前[batch-thread35354]com。db。wmdl。价格档案。工作一批听众。PriceFileReaderListener([])-PriceFileReaderListener-阅读2019-07-02T17:02:30513 8130474信息之前[batch-thread35353]com。db。wmdl。价格档案。工作一批听众。PriceFileReaderListener([])-PriceFileReaderListener-阅读2019-07-02T17:02:30513 8130474信息之前[batch-thread35355]com。db。wmdl。价格档案。工作一批听众。PriceFileReaderListener([])-PriceFileReaderListener-在2019-07-02T17:02:30586 8130547信息[QuartzScheduler\u Worker-1]之前。db。wmdl。价格档案。工作一批听众。PriceFileJobListener([])-SpringBatchJob[入站id:56435][spring批处理作业执行id:21]导入已完成

共有1个答案

禄星腾
2023-03-14

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

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

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

 类似资料:
  • 当我尝试通过启动不同的线程来执行所有同步方法时,我在一个类中有三个同步方法,我看不到同步的输出,在对象上没有获得锁 公共类DisplayMessage{ }线程类: 公共类 MyThread 扩展了线程 { }Thread2类:公共类MyThread2扩展线程{ } 线程 3 类: 包装Synchronization.classlock; 公共类MyThread3扩展线程{ } 使用main方法生

  • 我目前正在处理一批数据,这些数据来自一个拥有数百万行的大型SQL数据库。 它在处理器中执行一些处理,包括通过带有连接的大型sql查询对从Reader检索到的行进行分组。 编写器将结果写入另一个表。 问题是此Batch存在性能问题,因为Sql选择查询需要大量时间并且步骤不会在多线程中执行。 因此,我希望在多标题中运行它们,但问题是,这些步骤通过计算具有相同类型的所有行的总数来对行进行分组。 因此,如

  • 本文向大家介绍详解C#多线程之线程同步,包括了详解C#多线程之线程同步的使用技巧和注意事项,需要的朋友参考一下 多线程内容大致分两部分,其一是异步操作,可通过专用,线程池,Task,Parallel,PLINQ等,而这里又涉及工作线程与IO线程;其二是线程同步问题,鄙人现在学习与探究的是线程同步问题。 通过学习《CLR via C#》里面的内容,对线程同步形成了脉络较清晰的体系结构,在多线程中实现

  • 我有一个spring批处理作业,它接收平面文件,处理记录,并将输出写入另一个平面文件。我分别使用了和作为读写器。然而,当我尝试实现多线程步骤时,我的工作无法正常工作。我在日志文件中收到以下警告 你能帮我实现多线程步骤吗?

  • typora-copy-images-to: img 1. 多线程概述 人们在日常生活中,很多事情都是可以同时进行的。例如,一个人可以一边听音乐,一边打扫房间,可以一边吃饭,一边看电视。在使用计算机时,很多任务也是可以同时进行的。例如,可以一边浏览网页,一边打印文档,还可以一边聊天,一边复制文件等。计算机这种能够同时完成多项任务的技术,就是多线程技术。Java是支持多线程的语言之一,它内置了对多线

  • 线程2:4 . . 线程3:7 线程3:8 线程1:9 这是我为正在执行线程的类编写的代码 我认为问题在于NumberEntry对象的创建。但我不太确定怎么修好它。如果有人能以任何方式帮助我,那就太好了:)。