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