单例模式有懒汉 饿汉 静态内部捏 枚举 的几种写法
这里主要讲解一下 懒汉 dcl 双重检验锁的方式 为什么会在 对象上加volatile 因为普通的sync 加锁 虽然保证了有序性 但是他保证的是 as if seari 语义里面的 不改变最终结过下的 允许顺序交换的有序性 所以这里需要 加volatile
饿汉式写法
还有静态内部类
对于以上懒汉式但是此种方式 也有一些问题 比如 反射可以破环单例 因为我们 私有的构造方法 此时 无法在外部进行创建对象 但是反射可以 允许访问 如下
就不能通过反射来破坏单例 但是 序列化呢 ? 序列化也会破坏单例 我们可以重写他的
readResolve()方法直接返回单例对象 即可解决