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