黑马程序员技术交流社区

标题: 单例设计模式 [打印本页]

作者: 醉演星松    时间: 2015-7-23 23:49
标题: 单例设计模式
分为懒汉式和饿汉式
饿汉式
  1. class Single
  2. {
  3.         private static final Single s = new Single();//final可以不写,写上更加严谨
  4.         private Single(){}
  5.         public static Single getInstance()
  6.         {
  7.                 return s;
  8.         }
  9. }
复制代码


线程安全

懒汉式
  1. 懒汉式:实例的延迟加载
  2. class Single
  3. {
  4.         private static Single s = null;
  5.         private Single(){}
  6.         public static Single getInstance()
  7.         {
  8.                 if(s==null)
  9.                         s = new Single();
  10.                 return s;
  11.         }
  12. }
复制代码

懒汉式是非线程安全的,所以需要改进以确保安全:
  1. 懒汉式在多线程访问时存在安全隐患可以将getInstance方法写成同步方法
  2.         为了提高效率,改写成同步代码块的形式
  3. class Single
  4. {
  5.         private static Single s = null;
  6.         private Single(){}
  7.         //public static synchronized Single getInstance()//同步函数,效率低
  8.         public static Single getInstance()
  9.         {
  10.                 if(s==null)
  11.                 {
  12.                         synchronized(Single.class)//每次都判断if(s==null),效率低,多加一层判断
  13.                         {
  14.                                 if(s==null)
  15.                                         s = new Single();
  16.                         }
  17.                 }
  18.                 return s;
  19.         }
  20. }
复制代码


所以一般还是用饿汉式




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2