单例模式

概念:指的是项目中只有一个该类的实例。
应用场景:
1.需要频繁创建的一些类(项目中需要大量的该类),使用单例可以降低系统的内存压力,减少 GC
2.某类只要求生成一个对象的时候
3.某些类创建实例时占用资源较多,或实例化耗时较长,且经常使用
方式1:

懒汉式)

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

方式2:

懒汉式:)

C](懒汉式:)

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

}
方式3:

饿汉式

TOC

public class Singleton {  
    private static Singleton instance = new Singleton();  
    private Singleton (){}  
    public static Singleton getInstance() {  
    return instance;  
    }  
}

方式4:
https://blog.csdn.net/qq_27489007/article/details/84966680@[TOC](双重检锁 详解 很清晰)

public class Singleton {  
    private volatile static Singleton singleton;  
    private Singleton (){}  
    public static Singleton getSingleton() {  
    if (singleton == null) {   //第一次判断证明该对象不为空的话直接返回该对象就行 没必要加锁了
        synchronized (Singleton.class) {  
        if (singleton == null) {  //第二次判断是防止多个线程同时通过了第一次判断,如果不判断是否为null 就会变成多例了
            singleton = new Singleton();  
        }  
        }  
    }  
    return singleton;  
    }  

}

5、登记式/静态内部类

TOC

public class Singleton {  
    private static class SingletonHolder {  
    private static final Singleton INSTANCE = new Singleton();  
    }  
    private Singleton (){}  
    public static final Singleton getInstance() {  
    return SingletonHolder.INSTANCE;  
    }  

}

6、枚举

TOC

public enum Singleton {
    INSTANCE;//肯定线程安全 只有一个被实例化的对象
    public void doSomething() {
        System.out.println("doSomething");
    }
}

//调用方法
public class Main {
public static void main(String[] args) {
Singleton.INSTANCE.doSomething();
}
}
单纯的记一下笔记 不喜勿碰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值