验证普通懒汉式单例模式在多线程下不安全
// 懒汉式: 用的时候创建
public class LazyMan {
private LazyMan() {
}
private static LazyMan lazyMan;
// 单线程ok
public static LazyMan getLazyMan() {
if (lazyMan == null) {
try {
//模拟网络延时
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
lazyMan = new LazyMan();
}
return lazyMan;
}
// 模拟多线程
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
new Thread(() -> {
System.out.println(Thread.currentThread().getName() + "lazyMan : " + getLazyMan());
}, "" + i).start();
}
}
}
控制台输出结果
0lazyMan : com.zheng.juc.single.LazyMan@42b95647
1lazyMan : com.zheng.juc.single.LazyMan@4bf69a32
6lazyMan : com.zheng.juc.single.LazyMan@4cac0ef5
8lazyMan : com.zheng.juc.single.LazyMan@53ce71d
7lazyMan : com.zheng.juc.single.LazyMan@ce0f957
3lazyMan : com.zheng.juc.single.LazyMan@68aeac0c
2lazyMan : com.zheng.juc.single.LazyMan@2cb04257
5lazyMan : com.zheng.juc.single.LazyMan@4f667964
9lazyMan : com.zheng.juc.single.LazyMan@41f57e52
4lazyMan : com.zheng.juc.single.LazyMan@77241ae5