关于Accumulator累加器 使用复杂表达式
来源:6-9 功能升级

技术进步官
2020-12-18
这是我运行的代码,当不是叠加或者叠乘的时候
public class Test10 {
public static void main(String[] args) throws InterruptedException {
LongAccumulator accumulator = new LongAccumulator((x, y) -> {
long s = x + x * y;
System.out.println(x + "+" + x + "*" + y + "=" + s);
return s;
}, 1);
ExecutorService executor = Executors.newFixedThreadPool(8);
IntStream.range(1, 10).forEach(i -> executor.submit(() -> accumulator.accumulate(i)));
executor.shutdown();
Thread.sleep(2000);
System.out.println(accumulator.getThenReset());
}
}
此时的运行结果:
但是当我把表达式写成一行,就可以运行出固定结果
public class Test10 {
public static void main(String[] args) throws InterruptedException {
LongAccumulator accumulator = new LongAccumulator((x, y) -> {
return x + x * y;
}, 1);
ExecutorService executor = Executors.newFixedThreadPool(8);
IntStream.range(1, 10).forEach(i -> executor.submit(() -> accumulator.accumulate(i)));
executor.shutdown();
Thread.sleep(1000);
System.out.println(accumulator.getThenReset());
}
}
所以在方法只写一行运行语句的时候,是会顺序运行吗?
写回答
1回答
-
技术进步官
提问者
2020-12-18
想明白了,是因为并发操作线程只要保证x和y是当前操作之后x的值不允许改变,只写一行语句的时候,是因为运行速度非常快,所以会有固定的结果出现。
00
相似问题