首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

单例模式的 两种 经典兑现

2012-08-26 
单例模式的 两种 经典实现单例模式定义:确保一个类只有一个实例。并提供一个全局访问点。?在实际工作和面试

单例模式的 两种 经典实现

单例模式定义:确保一个类只有一个实例。并提供一个全局访问点。

?

在实际工作和面试中,单例模式可能是我们遇到频率比较大的设计模式之一。

下面给出两种单例模式的实现方式:

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 会被当成循环引用 被回收(我猜的)。

?

?

两种写法都是非常常用的写法,希望能给面试和工作的同学一点帮助……

热点排行