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

xiaoxiao2021-02-28  100

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

//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.不确定是否使用时,饿汉会占用内存;你想,不管饿不饿,就把人家当成饿死鬼做了一大锅馒头,人家不吃多特么浪费啊!~~

转载请注明原文地址: https://www.6miu.com/read-52169.html

最新回复(0)