如何确保这两个并发数据结构语句作为原子块执行而无需使用synchronized
语句这样总和在任何给定的时间点都是一致的?
Note:我对Java中的多线程还是陌生的。
AtomicLong sumOfAllItems=new AtomicLong();
AtomicLong itemSpecificSum=new AtomicLong();
public void addPrice(long price){
// how to make sure that these two statements get executed
// with synchronised() block
sumOfAllItems.addAndGet(price);
itemSpecificSum.addAndGet(price);
}
更改您的方法:
public void addPrice(long price) {
// ...
}
至此:
public synchronized void addPrice(long price) {
// ...
}
通过将方法指定为sychronized
,JVM一次最多允许一个线程来执行该方法。
[还有其他编写线程安全代码的方法,但是除非并且直到有特定的原因使用它们,否则最好使用同步代码-这是简单,正确且易于理解的/原因。