单例模式的 两种 经典实现
单例模式定义:确保一个类只有一个实例。并提供一个全局访问点。
?
在实际工作和面试中,单例模式可能是我们遇到频率比较大的设计模式之一。
下面给出两种单例模式的实现方式:
1、急切实例化的方式:
?
public class Singleton{private static Singleton singleton = new Singleton();private Singleton(){}public static Singleton getInstance(){return singleton;}}?这种方式比较简单,也是比较常用的一种方式。定义变量时就实例化对象了。这样避免了多线程带来的同步问题。
?
2、双重检查加锁 的方式:
public class Singleton{private volatile static Singleton singleton ;private Singleton(){}public static Singleton getInstance(){if(singleton == null){synchronized (Singleton.class){if(singleton == null){singleton = new Singleton();}}}return singleton;}}?使用volatile 关键字保证了多线程情况下singleton 引用的可见性,使用双重检查锁定,只有在singleton 为空时才进行加锁操作,这样提高了程序的效率。双重检查锁定也是多线程程序中比较常见的一种加锁方式,但是这种写法不能用于jdk1.2以前的版本,因为jdk1.2版本 以前的jvm的垃圾回收机制有bug,singleton 会被当成循环引用 被回收(我猜的)。
?
?
两种写法都是非常常用的写法,希望能给面试和工作的同学一点帮助……