zoukankan      html  css  js  c++  java
  • 设计模式----单例模式的两种创建方法

    一、实现单例模式的需要的条件:

    1,有私有的构造器;

    2,一个静态方法;

    3,一个静态变量。

    二、实现单例模式的两种方法:

    第一种:急切实例化

    package singleton;
    
    /**
     * 急切实例化
     * @author lenovo
     *
     */
    public class Singleton2 {
        private static Singleton2 uniqueInstance = new Singleton2();
        
        private Singleton2(){
            
        }
        
        public static Singleton2 getInstance(){
            return uniqueInstance;
        }
        
        
    }

    第二种:双重检查加锁

    package singleton;
    /**
     * 双重检查加锁,使用的前提是必须是java1.5以上的版本.由于没有性能上的考虑,杀鸡用了牛刀
     * @author lenovo
     *
     */
    public class Singleton {
        /**
         * volatile关键字 确保:当uniqueInstance变量被初始化成singleton实例时,
         * 多个线程正确地处理uniqueInstance变量
         */
        private volatile static Singleton uniqueInstance;
    
        private Singleton() {
    
        }
    
        public static Singleton getInstance() {
            if (uniqueInstance == null) {
                synchronized (Singleton.class) {
                    if (uniqueInstance == null) {  //进入区块后,再检查一次,如果仍是null,才创建实例
                        uniqueInstance = new Singleton();
                    }
                }
            }
            return uniqueInstance;
        }
    }

    三、注意事项:

    1,如果程序中有两个或两个以上类加载器,不同的类加载器可能会加载同一个类,从整个程序来看,同一个类会被加载多次。

    因此,在这种情况下需要程序员自行指定同一个类加载器。

    2,为什么不使用全局变量?全局变量可以提供全局访问,但是不能确保只有一个实例。

    在JAVA中,全局变量基本上就是对对象的静态引用。

  • 相关阅读:
    html问题记录20180529
    html问题记录20180518
    html问题记录20180515
    Redis持久化--AOF
    Redis持久化--RDB
    Redis事件模型
    两个字符串的编辑距离-动态规划方法
    Reactor事件模型在Redis中的应用
    事件驱动模式--Reactor
    IO多路复用--总结
  • 原文地址:https://www.cnblogs.com/chuyuan/p/6418285.html
Copyright © 2011-2022 走看看