饿汉单例模式
- 私有构造方法(防止外部new)
- 静态共有方法
懒汉单例模式
- 与饿汉式的区别是使用时才去创建
懒汉单例模式(线程安全)
- 在公有方法上添加同步锁
懒汉单例模式(双重校验锁)
- 加入volatile关键字,使不同线程对变量保持可见性(也就是最新值)
- 加入同步方法块,粒度更低
- 极限情况下,当两个线程同时进入双重校验的第一if判断,一个进入了同步方法块,一个堵塞在外边,当先进去的线程完成了对象的创建,第二个线程也能够通过双重校验第二if判断(volatile变量可见性)退回到return处
- 多个线程不会再经过同步块,在双重校验的第一if判断就被退回,提高运行效率