美文网首页
java中线程安全双重检查单例解析

java中线程安全双重检查单例解析

作者: 晏雪峤_美杜莎 | 来源:发表于2020-11-21 20:23 被阅读0次

    实现:
    public final class MySingleton {

    // 防止指令重排序. (顺序性,可见性), 保证了socket 变量先初始化,instance后赋值。
    private volatile static MySingleton instance = null;
    
    private Socket socket;
    
    private MySingleton() {
        this.socket = new Socket();
    }
    
    public static MySingleton getInstance() {
        if (null == instance) {
            // 2个线程同时访问时, 只有一个线程可以获取到锁。
            synchronized (MySingleton.class) {
                // 如果不添加判断, 那么第二个线程又重新实例化了一遍,浪费了。
                if (null == instance) {
                    // 注意volatile顺序性。
                    instance = new MySingleton();
                }
            }
        }
        return instance;
    }
    

    }

    相关文章

      网友评论

          本文标题:java中线程安全双重检查单例解析

          本文链接:https://www.haomeiwen.com/subject/lcgeiktx.html