同步单个类的多个静态变量

时间:2013-02-04 07:42:26

标签: java variables synchronization singleton

我只需要同步下面的singleton类的obj1和obj2,这样多个线程就可以获得这个类的单个实例,但是一次只有一个线程可以访问obj1或obj2。

  public class Sample{

    private static LinkedHashMap<String, String> obj1;
    private static LinkedHashMap<String, String> obj2;

    public static Sample getInstance() {
        if (instance == null) {
            instance = new Sample();
        }
        return instance;
    }

    private Sample() {

    }

    public void add(LinkedHashMap lhm){
        //steps
        }

    public void remove(LinkedHashMap lhm){
        //steps
        }

}

我应该怎么做呢?

1 个答案:

答案 0 :(得分:4)

首先,制作2个变量实例变量而不是静态变量。

其次,同步单身人士的方法:

public synchronized void add(LinkedHashMap lhm){
    //steps
}

我会避免单身人士懒惰的实例化。大多数时候,没有附加价值:

private static final Sample INSTANCE = new Sample();

public static Sample getInstance() {
    return INSTANCE;
}

如果你真的想要保持懒惰的初始化,那么getInstance()方法也应该同步,否则两个线程可能会得到你的单例的两个不同的实例。