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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 醉演星松 中级黑马   /  2015-7-23 23:49  /  156 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

分为懒汉式和饿汉式
饿汉式
  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. }
复制代码


所以一般还是用饿汉式

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马