码迷,mamicode.com
首页 > 其他好文 > 详细

手写单例模式

时间:2019-12-23 18:48:52      阅读:119      评论:0      收藏:0      [点我收藏+]

标签:public   instance   特点   ==   zed   垃圾   懒汉模式   二次   访问   

/**
 * 单例模式
 * @author gy2018
 *
 */
public class SingletonDemo {
    /**
     * 所谓的单例模式,就是整个程序有且仅有一个实例。
     * 该类负责创建自己的对象 并确保只有一个对象被创建。
     * 在java中,一般常用在工具类的实现或创建对象 需要消耗资源
     *
     * 特点:
     * 类构造器私有
     * 持有自己类型的属性
     * 对外提供获取实例的静态方法
     */
    
    
    /**
     * 饿汉模式
     * 线程安全,比较常用,但是一开始就初始化,容易产生垃圾
     */
//    //创建私有静态的对象
//    private static SingletonDemo singletonDemo = new SingletonDemo();
//    //私有构造器
//    private SingletonDemo(){};
//    //提供一个共有可调用的方法获取实例
//    public static SingletonDemo getSingletonDemo(){
//        return singletonDemo;
//    }
    
    /**
     * 懒汉模式
     * 线程不安全,延迟初始化,严格意义上来讲不是单例模式
     */
//    private static SingletonDemo instance;
//    private SingletonDemo(){};
//    public static SingletonDemo getInstance(){
//        if(instance == null){
//            instance = new SingletonDemo();
//        }
//        return instance;
//    }
    
    /**
     * 双重锁的单例模式,安全且在多线程情况下能保持高性能
     * 进行了两次判断,避免了不要的实例,第二次是为了同步,避免多线程问题。
     * 由于instance = new SingletonDemo()对象的创建在JVM中可能会进行重排序,
     * 在多线程访问下存在风险,使用volatile修饰instance实例变量有效,解决该问题。
     */
    private static SingletonDemo instance;
    private SingletonDemo(){};
    public static SingletonDemo getInstance(){
        if(instance == null){
            synchronized (SingletonDemo.class) {
                if(instance == null){
                    instance = new SingletonDemo();
                }
            }
        }
        return instance;
    }
}

手写单例模式

标签:public   instance   特点   ==   zed   垃圾   懒汉模式   二次   访问   

原文地址:https://www.cnblogs.com/gygx110/p/12085174.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!