设计模式-单例
2021-12-31 本文已影响0人
go_2021
你所以为的天才,只不过是不断练习的结果而已。
-
单例大致分为4种:
饿汉式, 懒汉式, 懒汉式+双重检验, 内部静态类
-
单例 实现有2点要求
- 要保证类不能外部创建
构造方法private
- 保持唯一实例
饿汉式 and 内部静态类: 类的静态属性只会执行赋值一次。
懒汉式 and 懒汉式+双重检验: 加s锁控制创建逻辑,保证只会new
一次。
-
内部非静态类可以么?
不可以,内部非静态类是依赖外部类实例的。 -
双检为啥要加
volatile
因为第4步骤分为3步,不加
volatile
有可能会乱序 132执行。图二
如果132执行,那么图一中的第一步去判断,因为已经指向了内存所以直接走第五步,然后返回的是一个没有初始化好的实例,就会出问题。