歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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.  * */  
Copyright © Linux教程網 All Rights Reserved