我有2个并发数据结构,我想自动更新它们

问题描述 投票:0回答:1

如何确保这两个并发数据结构语句作为原子块执行而无需使用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);
}
java multithreading concurrentmodification atomicity
1个回答
0
投票

更改您的方法:

public void addPrice(long price) {
    // ...    
}

至此:

public synchronized void addPrice(long price) {
    // ...    
}

通过将方法指定为sychronized,JVM一次最多允许一个线程来执行该方法。

[还有其他编写线程安全代码的方法,但是除非并且直到有特定的原因使用它们,否则最好使用同步代码-这是简单,正确且易于理解的/原因。

© www.soinside.com 2019 - 2024. All rights reserved.