[英]How do I synchronize BigDecimal.add?
我意识到下面的代码不是线程安全的......
BigDecimal foo = new BigDecimal(0.0);
BigDecimal bar = new BigDecimal(10.00);
foo = foo.add(bar)
如果我将代码更新为:
BigDecimal foo = new BigDecimal(0.0);
BigDecimal bar = new BigDecimal(10.00);
synchronized (this) {
foo = foo.add(bar)
}
它会使代码线程安全吗? 抱歉这个愚蠢的问题
要使这样的操作原子化,您可以使用AtomicReference
:
AtomicReference<BigDecimal> foo = new AtomicReference<>(new BigDecimal(10.0));
...
foo.accumulateAndGet(bar, (f, b) -> f.add(b));
但这与在this
上同步块基本相同:
synchronized (this) {
foo = foo.add(bar);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.