Java 中多线程下的单例模式


Java 中多线程下的单例模式

  1. package namespace;  
  2.   
  3.   
  4.   
  5. //单例模式--- 饿汉式   
  6. /* 
  7. class Person  
  8. { 
  9.     private Person p=new Person (); 
  10.     private Person () {} 
  11.     public  Person GetInstance() 
  12.     { 
  13.         return p; 
  14.     } 
  15. } 
  16. */  
  17. /* 
  18.  *      下面是懒汉式,只在在单线种的情况下,而这种情况在多线程的情况下会多现在不安全现在,因为如果有两个线程同时访问到new Person ,那么我就生成两个对象,这样就违反了 
  19.  *              单例模式下面一个是在多线 
  20.  * */  
  21. /* 
  22. class Person  
  23. { 
  24.     private Person person=null; 
  25.     private Person () {} 
  26.     public Person getInstance() 
  27.     { 
  28.         if(person==null) 
  29.         { 
  30.             person =new Person(); 
  31.         } 
  32.         return person; 
  33.     } 
  34.      
  35. }*/  
  36. class Person   
  37. {  
  38.     private Person person=null;  
  39.     private Person () {}  
  40.     public Person getInstance()  
  41.     {  
  42.         if(person==null)  
  43.         {  
  44.             synchronized(this)  
  45.             {  
  46.                 if(person==null)  
  47.                     person =new Person();  
  48.                       
  49.             }  
  50.         }  
  51.         return person ;  
  52.     }  
  53. }  
  54. /* 
  55.  *  
  56.  *    这样在synchronized 线程控制块里面进行多线程的控制,就不会再出现多个线程访问时出现多个对象的情况了. 
  57.  *    还有一点就是外面的person ==null  判断是用来提高效率的,不然第一次都要对锁进行判断,消耗浓资源 
  58.  *    这样可以有次的提高效率 
  59.  * */  
  60. public class Single {  
  61.     public static void main(String args[])  
  62.     {  
  63.         System.out.println("this is java");  
  64.     }  
  65. }  
  66. /* 
  67.  *          单例模式就是在内存中想只能存在一个对象,而不允许再实例化其他的对象 
  68.  *  
  69.  * */  

相关内容