繁体   English   中英

在非同步静态方法中修改静态变量,是否存在线程安全的危险?

[英]Modifying a static variable in non-synchronized static method, is there a danger to thread safety?

我有一个类使用静态方法修改静态变量,如下所示,此方法是否需要同步以进行线程安全操作?

public final class IdManager {

    private static int noOfIdsInReserveCurrently = 100;   
    private static final AtomicInteger allotedUserIdsCount; 

    public static int getNewId(){
         noOfIdsInReserveCurrently--;
         ....
         return allotedUserIdsCount.incrementAndGet();
    }
}

该方法是否已同步?

嗯,它肯定不安全。 两个线程都可以读取值,但是减少它们的本地副本,然后写入。 不良。

可以将它(以及所有其他方面与变量同步) - 但最好使用专为此类设计而设计的AtomicInteger 如果您正在修改的唯一共享状态是一个值,那就没关系; 如果你想修改原子多个共享状态(例如,一些“下一个ID”计数器以及优秀的ID数),那么你就需要要么东西真的,真的仔细了解各种的交错, 使用synchronized块,而不是。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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