Java单例模式实现

1.单线程环境下

public class Singleton { 
    private static Singleton instance = null; 
    private Singleton() { 
        …         
    }         
    public static Singleton getInstance(){ 
        if (instance == null) { 
            instance = new Singleton(); 
        } 
        return instance;          
    } 

  在Java开发中,如果某个实例的创建需要消耗很多系统资源,那么我们通常会使用惰性加载机制,也就是说只有当使用到这个实例的时候才会创建这个实例,这个好处在单例模式中得到了广泛应用。

     当第一次调用Singleton.getInstance()的时候,这个单例才被创建,以后再调用的时候仅返回这个单例就可以了。

2.多线程环境下

public class Singleton { 
    private Singleton(){ 
        … 
    } 
    private static class SingletonContainer{ 
        private static Singleton instance = new Singleton(); 
    } 
    public static Singleton getInstance(){ 
        return SingletonContainer.instance; 
    } 

  JVM内部的机制能够保证当一个类被加载的时候,这个类的加载过程是线程互斥的。这样当我们第一次调用getInstance()的时候,JVM能够帮我们保证instance只被创建一次,并且会保证把赋值给instance的内存初始化完毕,此外该方法也只会在第一次调用的时候使用互斥机制。最后instance是在第一次加载SingletonContainer类时被创建的,而SingletonContainer类则在调用getInstance方法的时候才会被加载,因此也实现了惰性加载。

posted on 2013-08-07 11:03  青山隐隐,绿水迢迢  阅读(161)  评论(0编辑  收藏  举报