package com.design.patterns;
/**
* 懒汉式 同步代码块加载 线程不安全
* 1.将类构造器私有化,防止new对象
* 2.创建静态常量
* 3.提供公共获取对象的方法,只不过需要判断类对象是否为空,如果对象为空则进行创建对象,否则直接返回
*/
public class LazyLoadDemo_NotThreadSafe2 {
public static void main(String[] args) {
LazyNotSafeSingleton2 lazyNotSafeSingleton = LazyNotSafeSingleton2.getInstance();
LazyNotSafeSingleton2 lazyNotSafeSingleton2 = LazyNotSafeSingleton2.getInstance();
// 比较两个对象是否相等
System.out.println(lazyNotSafeSingleton == lazyNotSafeSingleton2);
// 查看两个对象的Hash值是否相同
System.out.println(lazyNotSafeSingleton);
System.out.println(lazyNotSafeSingleton2);
}
}
class LazyNotSafeSingleton2 {
private static Object object = new Object();
private LazyNotSafeSingleton2() {}
private static LazyNotSafeSingleton2 INSTANCE = null;
public static LazyNotSafeSingleton2 getInstance() {
if (INSTANCE == null) {
//此时拿到对象锁后,会对INSTANCE再次进行赋值,故此写法和没有加synchronized是一样的,都是线程不安全的
synchronized(object){
INSTANCE = new LazyNotSafeSingleton2();
}
}
return INSTANCE;
}
}
此时拿到对象锁后,会对INSTANCE再次进行赋值,故此写法和没有加synchronized是一样的,都是线程不安全的,所以一定不能使用。