我需要通过这样的线程计算数组:
public class Calculator implements Callable<int[]> {
@Override
public int[] call() {
int[] result = new int[100];
for (int i = 0; i < result.length; i++) {
result[i]++;
}
return result;
}
}主线程可能如下所示:
ExecutorService executor = Executors.newFixedThreadPool(1);
Future<int[]> future = executor.submit(new Calculator());
int[] result = future.get();我不知道如何确保result中所有元素的可见性。根据内存一致性特性的章节,似乎没有这样的发生-之前的关系。
遍历的一种方法是将数组封装到AtomicIntegerArray中。但我不知道是否还有其他的解决方案,可以推广到任何类型的原始数组。
谢谢
发布于 2016-07-15 06:13:34
来自未来https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html的javadoc
内存一致性效应:异步计算所采取的操作--在另一个线程中遵循相应的Future.get()操作之前发生。
https://stackoverflow.com/questions/38388753
复制相似问题