DoubleSummaryStatistics summaryStats = mTransactionSet.stream() .mapToDouble(this :: getPrice).summaryStatistics();
我有上面的代码,但是javadoc说DoubleSummaryStatistics不是线程安全的。
那么我如何确保对mTransactionSet进行操作时多个线程能够正常工作?
任何指针将不胜感激。谢谢
答案 0 :(得分:2)
DoubleSummaryStatistics
旨在用于流中,尤其是形式为以下代码的
DoubleSummaryStatistics stats = stream.collect(Collectors.summarizingDouble());
或者,如果您有DoubleStream
:
DoubleSummaryStatistics stats = stream.summaryStatisitics();
这适用于顺序流和并行流。并行流将不使用单个DoubleSummaryStatistics
对象来收集数据,而是将在每个线程中使用不同的实例,然后将数据与DoubleSummaryStatistics::combine
合并。
如果您想在流中使用DoubleSummaryStatistics
,则不必考虑所有这些东西。 Java为您做到了。如果要在多线程环境中自己使用它,请使用与并行流相同的方法:每个线程应使用自己的DoubleSummaryStatistics
对象,最后将所有数据组合在一起。
或者您当然可以同步对对象的所有访问,但这可能会非常慢。