单例模式
这个类的对象在jvm中只有一个实例,并提供一个全局访问节点(线程池,缓存,硬件设备)
饿汉式:天生线程安全(不考虑反射),类加载初始化时就创建实例
懒汉式:在取用(getInstence())时创建实例,多线程下不安全,需要加锁
- 数据库连接池的设计一般也是采用单例模式,因为数据库连接是一种数据库资源
- 在Spring中,每个bean默认就是单例的,这样做的优点是Spring容器可以管理
双重检验锁
public class Singleton4 {
// 私有构造
private Singleton4() {}
private static Singleton4 single = null;
// 双重检查
public static Singleton4 getInstance() {
if (single == null) {
synchronized (Singleton4.class) {
if (single == null) {
single = new Singleton4();
}
}
}
return single;
}
}
静态内部类和枚举类饿汉式
https://www.xeblog.cn/articles/16
应用场景
网站的计数器,一般也是采用单例模式实现,否则难以同步。
多线程的线程池的设计一般也是采用单例模式,这是由于线程池要方便对池中的线程进行控制。