java-单例,模式 线程安全实现方法

  1. //内部类实现懒汉式    
  2. public class Singleton    
  3.         
  4.     private static class SingletonHolder{    
  5.         //单例变量      
  6.         private static final Singleton instance new Singleton();    
  7.        
  8.         
  9.     //私有化的构造方法,保证外部的类不能通过构造器来实例化。    
  10.     private Singleton()    
  11.             
  12.        
  13.         
  14.     //获取单例对象实例    
  15.     public static Singleton getInstance()    
  16.       //   System.out.println("我是内部类单例!");    
  17.         return SingletonHolder.instance;    
  18.        
  19. }    


懒汉式(避免资源浪费)、线程安全、代码简单。因为方法第一次调用的时候才会被加载(实现了lazy),而且其加载过程是线程安全的(实现线程安全)。内部类加载的时候实例化一次instance。
private static class SingletonHolder 排它锁,只有一个线程可以访问

//下面用枚举方式实现单例

  1. 
    public class EnumSingleton{
        private EnumSingleton(){}
        public static EnumSingleton getInstance(){
            return Singleton.INSTANCE.getInstance();
        }
        
        private static enum Singleton{
            INSTANCE;
            
            private EnumSingleton singleton;
            //JVM会保证此方法绝对只调用一次
            private Singleton(){
                singleton = new EnumSingleton();
            }
            public EnumSingleton getInstance(){
                return singleton;
            }
        }
    }
    

原文地址:https://www.cnblogs.com/luckForever/p/7254119.html