java - 同步单例类的多个静态变量

标签 java variables synchronization 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
        }

}

我应该怎样做?

最佳答案

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

二、同步单例的方法:

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/

相关文章:

php - 将变量值赋给常量

javascript - 使用属性名称变量定义对象

JavaScript 变量变量

java - SQLite 如果存在现有数据则跳过或覆盖

java - 如何将 TreeTableView 列中的文本居中?

multithreading - 如何避免消息队列泛滥?

java - 对象上的同步锁

c# - EWS 当前不可用于此请求,因为目标站点中的客户端访问服务器都无法处理该请求

java - logback 日志未在 weblogic 12c 上打印

java - "The system cannot find the file C:\ProgramData\Oracle\Java\javapath\java.exe"