考虑一个步骤bean:
代码语言:javascript复制@Bean public Step stepForChunkProcessing() { return stepBuilderFactory .get("stepForChunkProcessing") .chunk(1000) .reader(reader()) .processor(processor()) .writer(writer()) .taskExecutor(taskExecutor()) .throttleLimit(10) .build(); }//@formatter:on @Bean public TaskExecutor taskExecutor(){ return new SimpleAsyncTaskExecutor("MyApplication"); }要求:在阅读器中,它从文件中读取(Entity1的)记录。在Processor中,它进行处理,在Writer中,它写入数据库。
在TaskExecutor之前,只创建了一个线程,它会在上面的块设置中定义的阅读器和处理器中循环1000次。然后它将移动到写入器,并写入所有1000条记录。同样,它将从记录号1001开始,然后在Reader和Processor中处理另外1000条记录。这是同步执行。
在TaskExecutor和限制为10之后,创建了10个相互独立的线程。它们将如何维护文件中已被其他线程处理的记录的数量?还要考虑如果我在阅读器的Read方法中给出了synchronized关键字,那么为什么不同的线程会检查文件中已经处理过的记录呢?