使用场景
- 要求生成唯一序列号的环境
- 在整个项目中需要一个共享访问点或共享数据,例如一个Web页面上的计数器,可以不用把每次刷新都记录到数据库中,使用单例模式保持计数器的值,并确保是线程安全的。
- 创建一个对象需要消耗的资源过多,如要访问IO和数据库等资源
- 需要定义大量的静态常量和静态方法的环境,可以采用单例模式
饿汉模式
public class Mgr{
private static final Mgr INSTANCE = new Mgr();
private Mgr() {
}
public static Mgr03 getInstance() {
return INSTANCE;
}
}
懒汉模式
//双重检查减少时间浪费
public class Mgr{
private static volatile Mgr03 INSTANCE;
private Mgr() {}
public static Mgr03 getInstance() {
if (INSTANCE == null) {
//如果只是这里一层的话,一个线程执行到new对象但是还没new的时候,另一个线程也会执行到new
synchronized(Mgr.class) {
if (INSTANCE == null) {
INSTANCE = new Mgr();
}
}
}
return INSTANCE;
}
}