黑马程序员技术交流社区

标题: java - 多线程下的单例模式 [打印本页]

作者: 黄新宇    时间: 2015-7-23 08:01
标题: java - 多线程下的单例模式
单利模式有两种
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. }  
复制代码

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




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