繁体   English   中英

如何同步 BigDecimal.add?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM