浅议单例模式之线程安全.doc
《浅议单例模式之线程安全.doc》由会员分享,可在线阅读,更多相关《浅议单例模式之线程安全.doc(6页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、 浅议单例模式之线程安全 作者: 远航的兵 时间:2013-01-30摘要 单例模式是一种常见的设计模式,在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。正是由于这个特点,单例对象通常作为程序中的存放配置信息的载体,因为它能保证其他对象读到一致的信息。这种方式只需访问该单例对象即可达到统一但是在多线程环境下,但是随着应用场景的不同,也可能带来一些同步问题。 本文将探讨一下在多线程环境下,使用单例对象时可能会带来的同步问题,并给出可选的解决办法。关键字 Java 设计模式 单例 线程 同步 双重检查锁 概念单例模式分类:懒汉式单例、饿汉式单例两种。单例模式特点:1、单例类
2、只能有一个实例2、单例类必须自己自己创建自己的唯一实例3、单例类必须给所有其他对象提供这一实例单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例问题描述 面试的时候,大家也许会被问到这样一个问题:请您写出一个单例模式(Singleton Pattern) ,当然都感觉比较简单,代码如下:/* * 演示单例模式之饥饿模式 * author Administrator * */public class EagerSingleton private static EagerSingleton instance=new EagerSingleton(); private Eager
3、Singleton()public static EagerSingleton getSingleInstance()return instance; 这种写法就是所谓的饥饿模式,每个对象在没有使用之前就已经初始化了。这就可能带来潜在的性能问题:如果这个对象很大呢?没有使用这个对象之前,就把它加载到了内存中去是一种巨大的浪费。针对这种情况,我们可以对以上的代码进行改进,使用一种新的设计思想延迟加载(Lazy-load Singleton)。 /* * 演示单例模式之懒汉模式 * author Administrator * */public class LazySingleton privat
4、e static LazySingleton instance; private LazySingleton()public static LazySingleton getSingleInstance()if (instance = null) instance = new LazySingleton(); return instance; 这种写法就是所谓的懒汉模式。它使用了延迟加载来保证对象在没有使用之前,是不会进行初始化的。但是,通常这个时候面试官又会提问新的问题来刁难一下。他会问:这种写法线程安全吗?回答必然是:不安全。测试结果: 这是因为在多个线程可能同时运行到判断instance
5、 为null,于是同时进行了初始化。所以,这是面临的问题是如何使得这个代码线程安全?很简单,在那个方法前面加一个Synchronized就OK了。 /* * 演示单例模式之线程安全 * author Administrator * */public class ThreadSafeSingleton private static ThreadSafeSingleton instance; private ThreadSafeSingleton() public static synchronized ThreadSafeSingleton getSingleInstance()if (inst
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 浅议单例 模式 线程 安全
限制150内