package com.qiang.learn;
/**
* 静态内部类实现的单例模式
* 饿汉模式升级版
* 线程安全的单例模式
*/
public class SingleObjectLock {
/**
* 构造方法
*/
public SingleObjectLock() {
}
/**
* 静态内部类
* 外部类加载时不会立即加载内部类
*/
private static class SingleHolderClass {
//
private final static SingleObjectLock Instance = new SingleObjectLock();
}
/**
* 当第一次加载SingleObjectLock类时并不会初始化instance,只有在第一次调用SingleObjectLock的getInstance()时Instance才会被初始化。
* 因此第一次调用getInstance方法会导致虚拟机加载SingleHolderClass类
*/
public static SingleObjectLock getInstance() {
return SingleHolderClass.Instance;
}
public static void main(String[] args) {
new Thread(() -> {
for (int i = 0; i < 10; i++) {
SingleObjectLock instance = SingleObjectLock.getInstance();
System.out.println(instance);
}
}).start();
}
}