Java - 如何确保可调用线程

时间:2016-07-15 05:54:12

标签: java multithreading

我需要通过这样的线程计算数组:

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。但我想知道是否有其他解决方案可以推广到任何类型的原始数组。

由于

1 个答案:

答案 0 :(得分:4)

来自未来的https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html

的javadoc
  

内存一致性效果:异步计算所采取的操作发生在另一个线程中相应的Future.get()之后的操作之前。