单例模式的四种实现及其优缺点

来源:互联网 发布:js 球状旋转效果 编辑:程序博客网 时间:2024/05/26 20:22

//单例模式的四种实现方式

//1.非线程安全

public class Test {    public static Test obj;    private Test(){};    public static Test getInstance() {        obj = new Test();        return obj;    } }

//2.非线程安全,永远需要这个对象,但是类加载时就会初始化这个对象,占用内存

class Test2{    public static Test2 obj=new Test2();    private Test2(){};    public static Test2 getInstance(){        return obj;    }}

//3.线程安全,慢

class Test3{    public static Test3 obj;    private Test3(){};    //每次获取对象都会走到这个“线程安全”的方法,等待获取锁,性能大减    public static synchronized Test3 getInstance(){        if(obj==null){            obj=new Test3();            return obj;        }        return obj;    }}

//4.线程安全,快

class Test4{    public static volatile Test4 obj; // 对obj的判断和操作都在主存进行    private Test4(){};    public static Test4 getInstance(){// 多个线程可以共用这个方法        if(obj==null){      //对象创建成功后,并发量大增            synchronized (Test4.class){                if(obj==null){                    obj=new Test4();                    return obj;                }            }        }        return obj;    }}

注:第二种为“饿汉式”实现方法,即不管用不用这个对象,都在类加载时创建:

1.优 点,场景为经常使用时,使用这种方式;
2.不确定是否使用时,饿汉会占用内存;你想,不管饿不饿,就把人家当成饿死鬼做了一大锅馒头,人家不吃多特么浪费啊!~~

原创粉丝点击