A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

单例对象(Singleton)是一种常用的设计模式。在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。这样的模式有几个好处:
1、某些类创建比较频繁,对于一些大型的对象,这是一笔很大的系统开销。
2、省去了new操作符,降低了系统内存的使用频率,减轻GC压力。
3、有些类如交易所的核心交易引擎,控制着交易流程,如果该类可以创建多个的话,系统完全乱了。(比如一个军队出现了多个司令员同时指挥,肯定会乱成一团),所以只有使用单例模式,才能保证核心交易服务器独立控制整个流程。
首先我们写一个简单的单例类:
  1. public class Singleton {

  2.         /* 持有私有静态实例,防止被引用,此处赋值为null,目的是实现延迟加载 */
  3.         private static Singleton instance = null;

  4.         /* 私有构造方法,防止被实例化 */
  5.         private Singleton() {
  6.         }

  7.         /* 静态工程方法,创建实例 */
  8.         public static Singleton getInstance() {
  9.                 if (instance == null) {
  10.                         instance = new Singleton();
  11.                 }
  12.                 return instance;
  13.         }

  14.         /* 如果该对象被用于序列化,可以保证对象在序列化前后保持一致 */
  15.         public Object readResolve() {
  16.                 return instance;
  17.         }
  18. }
复制代码
这个类可以满足基本要求,但是,像这样毫无线程安全保护的类,如果我们把它放入多线程的环境下,肯定就会出现问题了,如何解决?我们首先会想到对getInstance方法加synchronized关键字,如下:
  1. public static synchronized Singleton getInstance() {
  2.                 if (instance == null) {
  3.                         instance = new Singleton();
  4.                 }
  5.                 return instance;
  6.         }
复制代码




1 个回复

正序浏览
看不太明白啊。。。好郁闷
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马