和你理解的线程安全的单列模式绝对不一样

普通(线程不安全)的懒汉式和饿汉式

直接上代码:
和你理解的线程安全的单列模式绝对不一样
和你理解的线程安全的单列模式绝对不一样
这个不安全就不用我说了吧

接下来看看你理解的线程安全的单例模式

和你理解的线程安全的单列模式绝对不一样
接下来来看看我怎么**这个线程安全的单例模式
1,首先咱们先看看用方法创建对象是不是安全的
和你理解的线程安全的单列模式绝对不一样
可以看到返回true说明是安全的
再用反射来攻击它
和你理解的线程安全的单列模式绝对不一样
看到没 ! 看到没!! 我厉害吧!

咱们继续升级

和你理解的线程安全的单列模式绝对不一样
这个我可能要跟大家解释一下了,首先有一个volatile这个字段,然后还加了synchronized这个锁 。
volatile:我就知道是防止指令重排,你们去百度一下,我也说不清楚。(其实我也不是很理解,嘿嘿)

到这里先别往下看,你们觉得这个会出现线程安全问题嘛。(自己猜一猜)

和你理解的线程安全的单列模式绝对不一样
看到没 !!看到没 !! 还有谁我就问,还有谁。

这时我们应该思考一下了,如果连这样都不能实现线程安全的单例模式,还能怎么实现。而且谁发明的这个反射妈蛋,没有反射该多好,是不是。其实除了反射以外,还有一种序列化攻击也能出现线程安全问题。
欸,还是给你们看看吧。本来不想给你们看的,你们都学会了,我就很难受了。
和你理解的线程安全的单列模式绝对不一样
看到没 ,我牛皮不? 我就问,还有谁。

接下来就是重头戏了,看好了

咱们先创建一个枚举类,别眨眼
和你理解的线程安全的单列模式绝对不一样
然后我们用反射攻击它
和你理解的线程安全的单列模式绝对不一样
欸,怎么报错了???不可能啊,然后,经过我深思熟虑,穿过喜马拉雅山,登上最高峰,我突然顿悟了,
代码没问题,它本来就是这样滴,只要反射攻击枚举类型就会这样滴,小伙伴们我叼不叼,等下记得夸一下
我,

咱们再来看看序列化攻击的情况,别眨眼
和你理解的线程安全的单列模式绝对不一样
看到没,看到没。我特么,天才。不说了,就这样。去装逼去了。
第一次写博客不会用,你们将就看,感觉这样对你们也好,你们至少可以手写,好好加油哈。