Java 饿汉式懒汉式六种方法

Posted 亮子zl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 饿汉式懒汉式六种方法相关的知识,希望对你有一定的参考价值。

六种常见形式

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;
		
	

 

以上是关于Java 饿汉式懒汉式六种方法的主要内容,如果未能解决你的问题,请参考以下文章

java GOF23设计模式-饿汉式和懒汉式

关于Java单例模式中懒汉式和饿汉式的两种类创建方法

Java单例模式--------懒汉式和饿汉式

单例设计模式的懒汉式与饿汉式

java软件设计模式——单例设计模式中的饿汉式与 懒汉式示例

Java 设计模式 -- 单例模式的实现(饿汉式枚举饿汉式懒汉式双检锁懒汉式内部类懒汉式)jdk 中用到单例模式的场景DCL实现单例需用volatile 修饰静态变量