静态内部类实现单例模式

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

问题:为什么这种写法既线程安全又实现了懒加载?

​ 首先,由于INSTANCE是static final的,JVM保证它只会被初始化一次,所以无论有几个线程访问,最终得到的INSTANCE只会有一个,而且类加载也是线程安全的。

​ 第二,由于内部类只有在使用的时候才加载,所以只有调用getInstance()方法的时候才会加载,实现了懒加载。