设计模式---单例
单例模式
确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例
/*** 单例中的饿汉式*/
class Single {private static Single single = new Single();private Single() {}public static Single getInstance() {return single;}
}/*** 懒汉式*/
class Single2 {private volatile static Single2 single2;private Single2() {}public static Single2 getInstance() {if (single2 == null) {synchronized (Single2.class) {if (single2 == null) {single2 = new Single2();}}}return single2;}
正确的双重检查锁定模式需要需要使用volatile。volatile主要包含两个功能。
- 保证可见性。使用volatile 定义的变量,将会保证对所有线程的可见性。
- 禁止指令重排序优化。
由于volatile 禁止对象创建时指令之间重排序,所以其他线程不会访问到一个未初始化的对象,从而保证
安全性。