• 单例模式的双重检查加锁机制


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

            所谓“双重检查加锁”机制,是指并不是每次静茹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;
        }
    }
  • 相关阅读:
    连接池的配置与维护
    对面向对象的理解
    ActiveMQ重试机制
    activemq持久化的几种方式详解
    zookeeper写数据流程
    G1垃圾回收器
    REDIS哨兵模式和集群模式
    REDIS复制
    REDIS参数配置和运行状态
    slow-log 和bin-log相关参数介绍
  • 原文地址:https://www.cnblogs.com/sheng-sjk/p/14176322.html
Copyright © 2020-2023  润新知