单例模式

在整个系统中,只能存在一个对象实例,也就是说只能new一次

饿汉式:

在系统启动后,就会实例化一个对象(不管用不用得到,我先买了再说)

  • 缺点:造成内存浪费(如果从来没有使用过)

  • 优点:不会造成线程安全的问题

1
2
3
4
5
6
7
8
9
class EHPatternInstance1{
    private final static EHPatternInstance1 INSTANCE = new EHPatternInstance1();
    private EHPatternInstance1(){
 
    }
    public static EHPatternInstance1 getInstance(){
        return INSTANCE;
    }
}

  

懒汉式:

在需要用到的时候才进行实例化(作业等老师快要检查了才做)

  • 优点:节省内存,如果永远不会用到,则将不会被创建

  • 缺点:需要考虑线程安全问题

复制代码
class LHPatternThreadUnSafe{
    private static LHPatternThreadUnSafe INSTANCE;
    private LHPatternThreadUnSafe(){

    }

    public static LHPatternThreadUnSafe getInstance(){
        if (INSTANCE == null) {
            INSTANCE = new LHPatternThreadUnSafe();
            return INSTANCE;
        }
        return INSTANCE;
    }
}
复制代码

 

双检锁:

复制代码
/**
 * 同步代码块 双重检查  锁住当前类,保证同一时间只有一个实例被创建
 */
class LHPatternThreadSafeDoubleCheck{
    private static LHPatternThreadSafeDoubleCheck INSTANCE;
    private LHPatternThreadSafeDoubleCheck(){

    }

    public static LHPatternThreadSafeDoubleCheck getInstance(){
        if (INSTANCE == null) {
            synchronized (LHPatternThreadSafeDoubleCheck.class){
                if (INSTANCE == null) {
                    INSTANCE = new LHPatternThreadSafeDoubleCheck();
                }
            }
            return INSTANCE;
        }
        return INSTANCE;
    }
}
复制代码

 

posted @   天有多高我有多骚  阅读(2)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示