【发布时间】:2018-06-18 10:25:26
【问题描述】:
我想知道以下是否有效:
class SomeCalc {
AtomicLong someResultA;
AtomicDouble someResultB;
public SomeCalc(List<Something> someList) {
final Stream<Something> someStream = someList.stream();
new Thread(() -> {
long result = someStream.mapToLong(something -> something.getSomeLong()).sum();
someResultA.set(result);
}).start();
new Thread(() -> {
double result = someStream.mapToDouble(something -> (double) something.getSomeLong() / something.getAnotherLong()).sum();
someResultB.set(result);
}).start();
}
}
只要结果(如本例中所示)是原子的,那么这会很好吗?或者在此过程中会出现任何ConcurrentAccessModification 异常,否则会出现其他问题?
【问题讨论】:
标签: java multithreading concurrency java-8 java-stream