我只需要同步下面的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
}
}
我应该怎么做呢?
答案 0 :(得分:4)
首先,制作2个变量实例变量而不是静态变量。
其次,同步单身人士的方法:
public synchronized void add(LinkedHashMap lhm){
//steps
}
我会避免单身人士懒惰的实例化。大多数时候,没有附加价值:
private static final Sample INSTANCE = new Sample();
public static Sample getInstance() {
return INSTANCE;
}
如果你真的想要保持懒惰的初始化,那么getInstance()
方法也应该同步,否则两个线程可能会得到你的单例的两个不同的实例。