静态内部类实现单例模式
4/11/2021 单例模式
# 使用静态内部类实习单例模式
public class UserSingleton {
/** 私有化构造器 */
private UserSingleton() {
}
/** 对外提供公共的访问方法 */
public static UserSingleton getInstance() {
return UserSingletonHolder.INSTANCE;
}
/** 写一个静态内部类,里面实例化外部类 */
private static class UserSingletonHolder {
private static final UserSingleton INSTANCE = new UserSingleton();
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
问题:为什么这种写法既线程安全又实现了懒加载?
首先,由于INSTANCE是static final的,JVM保证它只会被初始化一次,所以无论有几个线程访问,最终得到的INSTANCE只会有一个,而且类加载也是线程安全的。
第二,由于内部类只有在使用的时候才加载,所以只有调用getInstance()方法的时候才会加载,实现了懒加载。