我只需要同步以下单例类的 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
}
}
我应该怎样做?
最佳答案
首先,将这两个变量设为实例变量而不是静态变量。
二、同步单例的方法:
public synchronized void add(LinkedHashMap lhm){
//steps
}
我会避免单例的惰性实例化。大多数时候,没有附加值:
private static final Sample INSTANCE = new Sample();
public static Sample getInstance() {
return INSTANCE;
}
如果您确实想保持延迟初始化,那么 getInstance()
方法也应该同步,另外两个线程可能会获得单例的两个不同实例。
关于java - 同步单例类的多个静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14682330/