Java中的五种单例模式实现方法

来源:互联网 发布:教务系统数据库 编辑:程序博客网 时间:2024/06/07 03:37
/**

 *五、 双重校验锁,在当前的内存模型中无效

 */

classLockSingleton{

    privatevolatile static LockSingleton singleton;

    privateLockSingleton(){}

     

    //详见:http://www.ibm.com/developerworks/cn/java/j-dcl.html

    publicstatic LockSingleton getInstance(){

        if(singleton==null){

            synchronized(LockSingleton.class){

                if(singleton==null){

                    singleton=newLockSingleton();

                }

            }

        }

        returnsingleton;

    }

     

}

/**

 * 四、枚举,《Effective Java》作者推荐使用的方法,优点:不仅能避免多线程同步问题,而且还能防止反序列化重新创建新的对象

 */

enumEnumSingleton{

    INSTANCE;

    publicvoid doSomeThing(){

    }

}

/**

 * 三、静态内部类 优点:加载时不会初始化静态变量INSTANCE,因为没有主动使用,达到Lazy loading

 */

classInternalSingleton{

    privatestatic class SingletonHolder{

        privatefinal static  InternalSingleton INSTANCE=new InternalSingleton();

    }  

    privateInternalSingleton(){}

    publicstatic InternalSingleton getInstance(){

        returnSingletonHolder.INSTANCE;

    }

}

/**

 * 二、恶汉,缺点:没有达到lazy loading的效果

 */

classHungrySingleton{

    privatestatic HungrySingleton singleton=newHungrySingleton();

    privateHungrySingleton(){}

    publicstatic HungrySingleton getInstance(){

        returnsingleton;

    }

}

/**

 * 一、懒汉,常用的写法

 */

classLazySingleton{

    privatestatic LazySingleton singleton;

    privateLazySingleton(){

    }

    publicstatic LazySingleton getInstance(){

        if(singleton==null){

            singleton=newLazySingleton();

        }

        returnsingleton;

    }  

}
原创粉丝点击