0

我只需要同步以下单例类的 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
        }

}

我该怎么做呢?

4

1 回答 1

4

首先,将 2 个变量设为实例变量而不是静态变量。

二、同步单例的方法:

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

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

private static final Sample INSTANCE = new Sample();

public static Sample getInstance() {
    return INSTANCE;
}

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

于 2013-02-04T07:46:55.503 回答