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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄新宇 中级黑马   /  2015-7-23 08:01  /  362 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

单利模式有两种
1、饿汉模式(线程安全的)
  1. package net.chopsuey.singleton;  
  2.   
  3. public final class EagerSingleton  
  4. {  
  5.     private static EagerSingleton singObj = new EagerSingleton();  
  6.   
  7.     private EagerSingleton()  
  8.     {  
  9.     }  
  10.   
  11.     public static EagerSingleton getSingleInstance()  
  12.     {  
  13.         return singObj;  
  14.     }  
  15. }  
复制代码


2、懒汉模式(线程不安全)
  1. package net.chopsuey.singleton;  
  2.   
  3. public final class LazySingleton  
  4. {  
  5.     private static LazySingleton singObj = null;  
  6.   
  7.     private LazySingleton()  
  8.     {  
  9.     }  
  10.   
  11.     public static LazySingleton getSingleInstance()  
  12.     {  
  13.         if (singObj == null)  
  14.         {  
  15.             singObj = new LazySingleton();  
  16.         }  
  17.         return singObj;  
  18.     }
复制代码


修改一下是可以实现线程安全的
  1. package net.chopsuey.singleton;   
  2.    
  3. public class Singleton   
  4. {   
  5.     private static class SingletonHolder   
  6.     {   
  7.         static Singleton instance = new Singleton();   
  8.     }   
  9.    
  10.     public static Singleton getInstance()   
  11.     {   
  12.         return SingletonHolder.instance;   
  13.     }   
  14. }  
复制代码

一个静态内部类内的一个静态成员就可以保证它只在类被加载时只初始化一次。
因此不管有多少个线程来调用它,都只能得到同个实例(类被加载时初始化的那个)。
在使用单利模式的时候应该注意多线程情况下是否会出错。

1 个回复

倒序浏览
赞赞
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马