zoukankan      html  css  js  c++  java
  • 单例模式的双重检查加锁机制

            因为懒汉式的实现是线程安全的,所以会降低整个访问速度,而且每次访问都要判断一次。有没有更好的方式实现呢?可以使用“双重检查枷锁”的方式来实现。

            所谓“双重检查加锁”机制,是指并不是每次静茹getInstance方法都需要同步,而是先不同步。当进入方法后,先检查实力是否存在,如果不存在才进行下面的同步块,着是第一次检查,进入同步代码块,再次检查实力是否存在。如果不存在,就在同步的情况下创建一个实例,这是第二重检查。这样一来,整个过程只需要一次同步,从而减少了多次在同步情况下进行判断所浪费的时间。

    public class Singleton {
        private static Singleton instance = null;
        private Singleton() {}
        public static Singleton getInstance() {
            // 先检查实例是否存在,如果不存在才进入下面的同步块
            if(instance == null) {
                // 同步块,线程安全的创建实例
                synchronized (Singleton.class) {
                    // 再次检查实例是否存在,如果不存在,才真正地创建实例
                    if (instance == null) {
                        instance = new Singleton();
                    }
                }
            }
            return instance;
        }
    }
  • 相关阅读:
    OpenMP vs WinSxS
    JIT, dynarec and binary translation
    VC++2010 bug
    控制和释放共享内存块
    分配和释放信号量
    代码列表5.1 (shm.c) 尝试共享内存
    绑定和脱离
    信号量
    每个字段动态添加一个随机数
    最近做了一个红底鞋类电商网站
  • 原文地址:https://www.cnblogs.com/sheng-sjk/p/14176322.html
Copyright © 2011-2022 走看看