簡體   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