java中的单例模式

单例模式是每个java程序员最先接触到设计模式之一,因为他结构简单。这里也不多说了简单写一个单例模式的Demo

package com.lyk;
public class SingletonDemo {

    //私有化构造方法
    private SingletonDemo() {
    }

    //static随着类的加载而加载一次
    private static SingletonDemo singletonDemo = new SingletonDemo();

    //这个方法一定是static的因为他要使用SingletonDemo类直接调用
    public static SingletonDemo getInstance() {
        return singletonDemo;
    }
}


单例模式有一个坑,就是懒汉式,上面写的是饿汉式,我再写一个懒汉式,对比说一下
package com.lyk;
public class SingletonDemo {

    //私有化构造方法
    private SingletonDemo() {
    }

    //我在类的初始化的时候,我只创建了一个null的对象
    private static SingletonDemo singletonDemo = null;

    //这个方法一定是static的因为他要使用SingletonDemo类直接调用
    public static SingletonDemo getInstance() {
        //当高并发的时候,会出现很多线程同步到这个状态,破坏了单例
        if (singletonDemo == null) {
            return new SingletonDemo();
        }
        return singletonDemo;
    }
}

显然懒汉式问题很严重,他不能保证程序初始化时多线程并发访问的单例状态

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章