我陷入了这样的境地:
使用大小为 n
的未设置引用 (null
) 的数组实例化一个新对象。
构建步骤应该为每个索引分配一次引用,然后返回完整填充的数组。
复杂性在于数组是由多个线程并行输入的。
我不关心设置操作的原子性,因为两个线程无法访问相同的索引,但是,我想确保返回填充数组的线程“看到”每个填充的索引。
private final String[] arr = new String[n];
private void parallelFeed() {...} // Multi-threaded
public void build() {
parallelFeed(arr);
return arr;
}
我应该使用AtomicReferenceArray
吗?
非常感谢您的帮助
最佳答案
在parallelFeed
中,启动您的供给线程。假设您的供给线程不重叠,并且每个线程都有自己的范围,以便它们一起完全填充数组。然后在parallelFeed
中加入
线程。 parallelFeed
将等待其他 thead 完成。假设没有线程无法完成其工作,parallelFeed
“看到”所有索引都已被填充。
注意
既然您在评论中提到了“Scala Futures”,请看一下 How to wait for several futures有关如何“加入”可能发生错误的多个 future 的更多讨论。
关于Java - 我应该使用 AtomicReferenceArray 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47163480/