一:饿汉模式:
二:懒汉模式:
1.饿汉模式即使在多线程情况下也是安全的。但饿汉模式在不管有没有外部调用时都先把对象创建出来,有时候会造成资源的浪费
2.懒汉模式在需要的时候再创建对象或将已经创建好的对象返回出去,不保证线程安全性
3.两种模式都需要私有化构造方法,并对外提供获得实例化对象的方法,不同点就在于一个是先创建好了,另一个是需要时再创建
三:懒汉模式在多线程环境下的实现:
1.双重检测锁:
之所以加锁后还要用volatile修饰的原因在于synchronized只能保证线程间的有序性,但不能保证线程内的有序性,所以要加上volatile来彻底禁止指令重排