我需要通过这样的线程计算数组:
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
中所有元素的可见性。根据{{3}}部分,似乎没有这种发生过的关系。
走动的一种方法是将数组包装成AtomicIntegerArray
。但我想知道是否有其他解决方案可以推广到任何类型的原始数组。
由于
答案 0 :(得分:4)
来自未来的https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html
的javadoc内存一致性效果:异步计算所采取的操作发生在另一个线程中相应的Future.get()之后的操作之前。