Java设计模式_单例设计模式

来源:互联网 发布:手机均衡器软件 编辑:程序博客网 时间:2024/05/23 12:18
/** * 单例设计模式:饿汉式,不适用于多线程,效率低 */public class SingleTest {    //定义一个私有的构造方法    private SingleTest()    {}    //将自身的实例对象设置成静态 final    private static final SingleTest instance = new SingleTest();    private static SingleTest getInstance(){        return instance;

}

}

/** * 单例设计模式:饱汉式,非线程安全 */public class SingleTest {    //定义一个私有的构造方法    private SingleTest()    {}    //将自身的实例对象设置成静态(不初始化,没有final修饰)    private static  SingleTest instance ;    private static SingleTest getInstance(){        if(instance==null)            instance = new SingleTest();        return instance;    }}
/** * 单例设计模式:饱汉式,线程安全,效率不高 */public class SingleTest {    //定义一个私有的构造方法    private SingleTest()    {}    //将自身的实例对象设置成静态(不初始化,没有final修饰)    private static  SingleTest instance ;    private static synchronized SingleTest getInstance(){        if(instance==null)            instance = new SingleTest();        return instance;    }}

/** * 单例设计模式:饱汉式,最优解 */public class SingleTest {    //定义一个私有的构造方法    private SingleTest()    {}    //将自身的实例对象设置成静态(不初始化,没有final修饰,使用volatile保证了线程访问时instance变量的可见性,    // 避免了instance初始化时其他属性还没赋值完时被另外的线程调用)    private static  volatile  SingleTest instance ;    private static  SingleTest getInstance(){        // 对象实例化时与否判断(不使用同步代码块,instance不等于null时,直接返回对象,提高运行效率)        if(instance==null)        {            //同步代码块(对象未初始化时,使用同步代码块,保证多线程访问时对象在第一次创建后,不再重复被创建)            synchronized (SingleTest.class)            {                //未初始化,则初始instance变量                if(instance==null)                    instance = new SingleTest();            }        }        return instance;    }}


0 0
原创粉丝点击