Java餓漢式怠け者式の6つの方法

2413 ワード

6つの一般的な形式
1餓漢式:オブジェクトを直接作成し、スレッドセキュリティの問題はありません.    直接実例化餓漢式(簡潔直観)    列挙式(最も簡潔)    静的コードブロック餓漢式(適全複雑インスタンス化)     2怠け者:オブジェクトの作成を遅らせる    スレッドが安全ではありません(単一スレッド用)    スレッドセキュリティ(マルチスレッド用)    静的内部クラス形式(マルチスレッド用)
餓漢式:
/*
	 *   :        (    )
	 *1、      
	 *2、    ,         
	 *3、        
	 *4、      ,   final  
	 */
	 public class Singleton1(){
	        public static final Singleton1 INSTANCE = new Singleton1();
			private Singleton1(){
			}
	 }
     public static void main(String[] args){
	      Singleton1 s= Singleton1.INSTANCE;
		  System.out.println(s);
	 }
     /*
	 *   ,               1.5  
	 *           
	 */
	 public enum Singleton1(){
	     INSTANCE
	 }
     public static void main(String[] args){
	      Singleton1 s= Singleton1.INSTANCE;
		  System.out.println(s);
	 }

    /*
	*        
	*
	*/
	public class Singleton1{
	    public static final Singleton1 INSTANCE;
		static{
		    INSTANCE = new Singleton1();
		}
		private Singleton1(){
		
		}
	}

怠け者:
/*
	*     (      )
	*    synchronized              
	*/
	public class Singleton1{
	   private static Singleton1 instance;
	   private Singleton1(){
	       
	   }
	   public static Singleton1 getInstance(){
	       if(instance == null){
	              try{
				      Thread.sleep(100);
				  }catch(InterruptedException e){
				      e.printStackTrace();
				  }
		         instance = new Singleton1();
		   }
		   return instance;
	   }
	}
	public static void main(){
	   Singleton1 s1= Singleton1.getInstance();
	}
	
	/*
	*    (      )
	*/
	public class Singleton1{
	   private static Singleton1 instance;
	   private Singleton1(){
	       
	   }
	   public static Singleton1 getInstance(){
	       if(instance == null){
	          synchronized(Singleton1.class){
	             if(instance == null){
	                try{
				        Thread.sleep(100);
				     }catch(InterruptedException e){
				         e.printStackTrace();
				     }
		             instance = new Singleton1();
		          }
	          }
	        }
		   return instance;
	   }
	}
	
	/*
	*       (      )
	*          ,  INSTANCE  
	*         getInstance,      
	*/
	public class Singleton1{
	    private Singleton1(){
		  
		}
		private static calss Inner{
		    private static final Singleton1 INSTANCE = new Singleton1();
		}
		public static Singleton1 getInstance(){
		    return Inner.INSTANCE;
		}
	}