zoukankan      html  css  js  c++  java
  • 设计模式java----单例模式


    一、懒汉式单例

    在第一次调用的时候实例化自己,Singleton的唯一实例只能通过getInstance()方法访问、线程不安全

    /**
     * Created by Admin on 2017/3/19.
     */
    public class Singleton {
        private static Singleton instance;
        private Singleton(){}
    
        public static Singleton getInstance() {
            if(instance==null){
                instance=new Singleton();
            }
            return instance;
        }
    }

    解决方案:


    1. 在getInstance方法上加同步
    /**
     * Created by Admin on 2017/3/19.
     */
    public class Singleton {
        private static Singleton instance;
        private Singleton(){}
    
        private static synchronized Singleton getInstance() {
            if(instance==null){
                instance=new Singleton();
            }
            return instance;
        }
    }

      2.双重检查锁定

    public class Singleton {
        private static Singleton instance;
        private Singleton(){}
    
        private static Singleton getInstance() {
            if(instance==null){
                synchronized(Singleton.class) {
                    if (instance == null) {
                        instance = new Singleton();
                    }
                }
            }
            return instance;
        }
    }

    3.3、静态内部类

    这实现了线程安全,又避免了同步带来的性能影响

    /**
     * Created by Admin on 2017/3/19.
     */
    public class Singleton {
        private  Singleton(){}
        private static class singleLazy{
            private static final Singleton instance=new Singleton();
        }
    
        private static final Singleton getInstance() {
                    return singleLazy.instance;
        }
    }

    二、饿汉式单例

    饿汉式单例类.在类初始化时,已经自行实例化

    /**
     * Created by Admin on 2017/3/19.
     */
    public class Singleton {
        private  Singleton(){}
            private static final Singleton instance=new Singleton();
    
        private static Singleton getInstance() {
                    return instance;
        }
    }
  • 相关阅读:
    MySQL客户端执行外部sql文件命令
    Java nextInt()函数
    JSP
    托管和非托管的区别。
    FTP软件Filezilla出现“读取目录列表失败”的解决办法
    Fiddler 抓包工具总结
    wampserver:Could not execute menu item.
    重装系统怎么恢复wampserver数据
    同时安装Xcode6和Xcode7导致出现N多UUID 模拟器解决办法
    打印沙漏
  • 原文地址:https://www.cnblogs.com/tk55/p/6581325.html
Copyright © 2011-2022 走看看