1

我试图理解“多线程步骤”,这是春季批处理中实现并行处理其他并行步骤和分区的方法之一。

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

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

谢谢,

4

1 回答 1

0

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

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

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

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

有关更多详细信息,请参阅参考文档的多线程步骤部分。

于 2020-04-26T13:16:38.210 回答