运维开发网
广告位招商联系QQ:123077622
 
广告位招商联系QQ:123077622

懒汉单例模式在多线程下的应用

运维开发网 https://www.qedev.com 2021-04-23 11:03 出处:51CTO 作者:qcwsh
1.懒汉单例模式,是在使用时判断对象是否存在,因此,是非线程安全的,需要通过添加synchronized对创建对象部分加锁;如何加锁:              1.首先想到的是在getInstance方法加锁;      如:  public static 类名 synchronized getInstance(){ if(null  == obj ){obj = new 类名();}retur

1.懒汉单例模式,是在使用时判断对象是否存在,因此,是非线程安全的,需要通过添加synchronized对创建对象部分加锁;

如何加锁:

              1.首先想到的是在getInstance方法加锁;

      如:  public static 类名 synchronized getInstance(){

 if(null  == obj ){

obj = new 类名();

}

return obj;

}

注: 该方法可行,可以保证所创建对象唯一,但是有可能导致线程阻塞;

2.使用synchronized代码块(由于JVM内部模型优化,执行可能有误)

如:public static 类名 getInstance(){

//双重判断对象 是否存在,外出用于判断是否调用线程进入阻塞状态,提高效率,

if(null  == obj){

synchronized(类名.class){

  if(null  == obj ){

obj = new 类名();

}

}

}

return obj;

}

建议使用静态内部类方式实现的单例

public class A {
    private static class B{
        private static final A a = new A();
    }
    public static A getInstance(){
        return B.a;
    }
    private A(){
        
    }
}

      

扫码领视频副本.gif

0

精彩评论

暂无评论...
验证码 换一张
取 消