单例模式

单例模式,保证一个类只有一个实例,并提供一个方法访问这个对象。

package com.aa.singleton;

/**
 * 测试饿汉式单例模式
 */
public class SingletonDemo1 {

    //静态属性
    // 由于加载类时,天然线程安全
    //如果创建好了没有调用这个方法使用这个对象,浪费了资源(缺点)
    private static SingletonDemo1 instance = new SingletonDemo1();//类初始化时立即加载
    //如果初始化的时候没有加载就是懒加载,也叫延时加载

    //私有构造器
    private SingletonDemo1() {

    }

    //饿汉式线程安全,不需要加同步代码块synchronized的标记,调用效率高
    public static SingletonDemo1 getInstance() {
        return instance;
    }

}

package com.aa.singleton;

//懒汉式 lazy load 延迟加载
public class SingletonDemo2 {
    //类初始化的时候,不初始化这个对象(延时加载,真正用的时候再创建)
    private static SingletonDemo2 s;

    private SingletonDemo2() {//私有化构造器
    }

    //优点:真正用的时候才加载,资源利用率高了
    //缺点:每次调用getInstance()方法都要同步,并发效率低,调用效率低
    public static synchronized SingletonDemo2 getInstance() {
        if (s == null) {
            s = new SingletonDemo2();
        }
        return s;
    }
}

package com.aa.singleton;

public class Client {
    public static void main(String[] args) {
        SingletonDemo1 s = SingletonDemo1.getInstance();
        SingletonDemo1 s2 = SingletonDemo1.getInstance();
        System.out.println(s == s2);    //true
        SingletonDemo2 ss = SingletonDemo2.getInstance();
        SingletonDemo2 ss2 = SingletonDemo2.getInstance();
        System.out.println(ss == ss2);    //true
    }
}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容