码迷,mamicode.com
首页 > 其他好文 > 详细

单例的三种实现方式

时间:2017-04-02 18:37:46      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:多个实例   静态内部类   private   cte   ret   实例   枚举   style   stat   

1双重加锁模式

public class Singleton {
    private volatile static Singleton singleton;
    public static Singleton getSingleton(){
        if(singleton==null){
            synchronized (Singleton.class) {
                if(singleton==null){
                    singleton = new Singleton();
                }
            }
        }
        return singleton;
    }
    
    private Singleton(){
        
    }
}

2静态内部类

public class Singleton {
    private Singleton(){
        
    }
    
    public Singleton getSingleton(){
        return SingletonInner.singleton;
    }
    private static class SingletonInner{
        protected  static Singleton singleton = new Singleton();
        
    }
}

3枚举

public enum Singleton {
    Singlton;
    private Singleton(){
        
    }
}

由于java提供了反射机制,第一种和第二种方式通过反射机制仍然有可能生成多个实例

单例的三种实现方式

标签:多个实例   静态内部类   private   cte   ret   实例   枚举   style   stat   

原文地址:http://www.cnblogs.com/ystq/p/6659409.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!