欢迎使用CSDN-markdown编辑器

来源:互联网 发布:c语言中标识符是什么 编辑:程序博客网 时间:2024/05/16 15:32

题目:设计一个类,我们只能实现该类的一个实例
一.只适用于单线程

class Singleton1{    /*     * 单例模式     */    private static Singleton1 instance = null;    private Singleton1(){     //不允许公开实例化     }    /**     *  此时适用于单线程     */    public static Singleton1 getSingleInstance(){        if(instance==null) instance=new Singleton1();        return instance;    }}

二.多线程但是效率不高

class Singleton2{    /*     * 单例模式     */    private static Singleton2 instance = null;    private Singleton2(){     //不允许公开实例化     }    /**     *  此时适用于多线程,但是效率不高     */    public static Singleton2 getSingleInstance(){         synchronized(Singleton2.class){              if(instance==null)                instance=new Singleton2();          }        return instance;    }}

三.加同步所前后判断实例是否存在

class Singleton3{    /*     * 单例模式     */    private static Singleton3 instance = null;    private Singleton3(){     //不允许公开实例化     }    /**     *  加锁前判断     */    public static Singleton3 getSingleInstance(){         if(instance==null){             synchronized(Singleton2.class){                 if(instance==null)                 instance=new Singleton3();             }         }        return instance;    }   }

四.推荐解法(利用静态构造函数)

class Singleton4{    /*     * 单例模式     */    private static Singleton4 instance = new Singleton4();    private Singleton4(){     //不允许公开实例化     }    public static Singleton4 getSingleInstance(){        return instance;    }   }
原创粉丝点击