单例模式的意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。比如,一台计算机上可以连好几个打印机,但是这个计算机上的打印程序只能有一个
这里就可以通过单例模式来避免两个打印作业同时输出到打印机中,
简单说来,单例模式(也叫单件模式)的作用就是保证在整个应用程序的生命周期中,
任何一个时刻,单例类的实例都只存在一个(当然也可以不存在)。
第一种形式
1 | public class Signgleton |
这种形式在多线程的环境下会出现问题。如果线程A在if判断后中断,那么就有可能在中断期间,另一线程B执行getInstance函数,当A重新获得处理器后,会再次创建一个实例。
第二种形式
1 | public class Singleton |
这种形式可以有效的支持多线程,但即使未被调用,该类也存在一个实例。
第三种形式:双重锁的形式
1 | public class Singleton |
把同步放在if条件内部是为了提高效率,这样只有在第一次实例化的时候才有可能同步,实例化之后,如果再会有实例化,会直接被if阻拦。