单例模式
一言以蔽之:内存中要不存在,要不就最多存在一份
所以,new 这个关键字只能出现一次。
一次意味着,不是谁都可以new的,只能被程序new一次。说白了,对外是不可见的,构造函数私有,对内只能加载一次。
屏蔽了构造函数,只能在加载一次上做文章。
加载一次关键字是static和enum
对于懒汉式和双重检查的单例,多线程还是会指令重排以及性能问题,是不安全的
1.饿汉式的直接就是属性static,当class加载的时候,static属性跟着加载,只加载一次,这里就可以做文章;
2.至于内部类,也是static 的,在调用内部类的时候加载一次
3.内部枚举,也类似内部类,枚举反编译编码,修饰符也是final static ,原理是一样的