春季批处理中的多线程步骤

时间:2020-04-24 15:17:40

标签: spring-batch spring-batch-tasklet

我正在尝试理解“多线程步骤”,这是Spring Batch中实现并行处理其他并行步骤和分区的方法之一。

  • 我的问题与读者有关。例如,假设有一个包含1000条记录的文件,块 大小为100,线程数为4。因此,在这种情况下,将有10个块,每个线程为 给定一个开始的块,当其完成时,剩余的块将分配给线程,并在 在一个时间点,只有4个块将由4个线程处理。但是线程如何决定哪些数据 读书?假设第一个线程已经在处理100条记录,那么第二个线程怎么知道 它不应该选择相同的记录并查找未选择其他线程的记录。

  • 在这种情况下,将会有一个Reader和writer的单个实例,它们在 线程?如果是,那么任何类级别的资源都不是线程安全的吗?

谢谢

1 个答案:

答案 0 :(得分:0)

但是线程如何决定读取哪些数据?

这是未定义的。将以不确定的顺序读取项目。这就是为什么当记录之间的读取顺序很重要时,使用多线程步骤不是一个好主意的原因。

在这种情况下,线程之间将共享Reader和writer的单个实例吗?如果是,那么任何类级别的资源都不安全吗?

是的,这些将在线程之间共享。每个读取器/写入器的Javadoc都会提及该读取器/写入器是否是线程安全的。

有关更多详细信息,请参考参考文档的Multi-threaded Step部分。