Java - 我应该使用 AtomicReferenceArray 吗?

标签 java concurrency parallel-processing

我陷入了这样的境地:

使用大小为 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/

相关文章:

java - 在 Java 中同时发出 Web 请求

delphi - 如何在delphi 10中的任务线程内使用for循环

scala - 为什么在 Akka Dispatcher 上启动时 Futures 中的 Futures 会按顺序运行

python - 为什么要使用 tf.train.Server 并行执行多个 tf.Session()?

使用条件变量的 C++ 监视器类/包装器

java - Akka Actor的紧急停止

java - 我如何重构多个 if 条件和多个运算符,以便我可以降低 java 中的代码复杂性

java - 在 Kotlin 中将函数调用分配给变量

java - class.java 使用未经检查或不安全的操作

java - Java 中的内存使用和垃圾收集