java单例模式4种使用方式分享

时间:2021-09-22 09:54:07

1、Java Concurrency In Practice的List

复制代码代码如下:

public class Singleton {  
    private static class SingletonHolder {  
        public static Singleton resource = new Singleton();  
    }  
    public static Singleton getResource() {  
        return  SingletonHolder.resource ;  
    }  

    private Singleton(){  

    }  
}

 

2、effective Java 

复制代码代码如下:

public class Singleton {  
    public static final Singleton INSTANCE = new Singleton();  

    private Singleton(){}  

    public void method(){  
        //...  
    }  
    public static void main(String[] a){  
        //调用方法。  
        Singleton.INSTANCE.method();  
    }  
}

 

3、利用枚举巧妙创建单实例

复制代码代码如下:

/** 
 * 利用枚举巧妙创建单实例 
 */  
public enum Singleton {  
    INSTANCE;  
    public void method(){  
        //...  
    }  
    public static void main(String[] a){  
        //调用方法。  
        Singleton.INSTANCE.method();  
    }  

 

4、双重锁

复制代码代码如下:

public class Singleton {  
    private static volatile Singleton instance = null;  
    /** 
     * 防止其他人new对象 
     */  
    private Singleton(){  
        System.out.println("init");  
    }  
    public static  Singleton getInstance(){  
        if(instance == null){  
            synchronized(Singleton.class){  
                if(instance == null){  
                    instance = new Singleton();  
                }  
            }  
        }  
        return instance;  
    }