zoukankan      html  css  js  c++  java
  • 单例模式,双重校验的懒汉式

    /**
     * 单例模式,双重校验的懒汉式
     */
    public class bTestSingleton {
        public static void main(String[] args) {
            Singleton s1 = Singleton.getInstance();
            Singleton s2 = Singleton.getInstance();
            System.out.println(s1==s2);
        }
    }
    
    
    class Singleton{
        private  Singleton(){
    
        }
    
        private static Singleton instance = null;
    
        public static Singleton getInstance(){
            if(instance==null) {   //为了不让其他的做无谓的等待,不是空的话直接返回
                synchronized (Singleton.class) {  //线程安全
                    if (instance == null) {       //是空的时候 创建
                        instance = new Singleton();
                    }
                }
            }
            return instance;
        }
    }
    

    饿汉式的 (上来就创建好,很饿)

    /**
     * 设计模式:设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格、以及解决问题的思考方式。
     * 23种设计模式
     *
     * 单例的设计模式:
     * 1.解决的问题:使得一个类只能够创建一个对象。
     * 2.如何实现?见如下的4步
     */
    
    //饿汉式的   (上来就创建好,很饿)
    public class TestSingleton1 {
        public static void main(String[] args) {
            Singleton1 s1 = Singleton1.getInstance();
            Singleton1 s2 = Singleton1.getInstance();
            System.out.println(s1==s2);
        }
    }
    
    //只能创建mySingleton的单个实例
    class Singleton1 {
    
        //1.私有化构造器,使得在类的外部不能够调用此构造器
        private Singleton1(){
    
        }
        //2.在类的内部创建一个类的实例
        private static Singleton1 instance = new Singleton1();
        //3.私有化此对象,通过公共的方法来调用
        //4.此公共的方法,只能通过类来调用,因此设置为static,同时类的实例也必须为static声明的
        public static Singleton1 getInstance(){
            return  instance;
        }
    }
    
    

    懒汉式 :可能存在线程安全

    /**
     * 懒汉式 :可能存在线程安全
     */
    public class TestSingleton2 {
        public static void main(String[] args) {
            Singleton2 s1 = Singleton2.getInstance();
            Singleton2 s2 = Singleton2.getInstance();
            System.out.println(s1==s2);
        }
    }
    
    class Singleton2{
        //1.
        private Singleton2(){
    
        }
        //2.
        private static  Singleton2 instance = null;
        //3.
        //4.
        public  static  Singleton2 getInstance(){
            if(instance==null){
                instance = new Singleton2();
            }
            return instance;
        }
    }
    
    
  • 相关阅读:
    Linux练习题
    我们普通大学生和国内一流大学的学生差距到底在哪里?
    Python修复图像文件后缀名
    Linux查找/扫描局域网打印机IP
    修改分区后的 Grub rescue
    Linux Matlab mex gcc 版本
    UFLDL新版教程
    Linux之时间、地点、人物、事件、情节
    GMchess Linux下的中国象棋游戏
    Linux 终端 忽略大小写
  • 原文地址:https://www.cnblogs.com/liyao0312/p/11622658.html
Copyright © 2011-2022 走看看