java – BigInteger Thread安全吗?
发布时间:2020-12-14 05:41:16 所属栏目:Java 来源:网络整理
导读:我需要通过多个线程更新全局BigInteger值 – BigInteger线程安全吗? 解决方法 BigInteger个对象是 immutable objects的代表性示例. 简而言之: Each immutable object is thread-safe ,but the reference to it 07002 . 对于不可变对象,状态在整个生命周期
我需要通过多个线程更新全局BigInteger值 – BigInteger线程安全吗?
解决方法
BigInteger个对象是
immutable objects的代表性示例.
简而言之:
对于不可变对象,状态在整个生命周期内都是固定的.因为没有更改它的选项,因此每个“更改”操作等同于替换新对象.因此,在特定参考上的N个线程并行执行一系列修改后,结果值很难预测(某些更新可能会丢失 – 未被注意). 我提出了一个需要JDK 8的紧凑型解决方案: final AtomicReference<BigInteger> valueHolder = new AtomicReference(BigInteger.ZERO); 使用这种方法,BigInteger提供的任何方法都可以重新表示为lambda表达式,例如: valueHolder.updateAndGet(x -> x.add(BigInteger.valueOf(10))); 要检查解决方案是否正确,您可以使用此代码段,使用并行流汇总所有低于100的整数(它是多线程操作): IntStream.range(0,100).parallel() .forEach(i -> valueHolder.updateAndGet(x -> x.add(BigInteger.valueOf(i)))); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |