java的双重检查锁定详解

     双重检查锁定模式(也被称为"双重检查加锁优化","锁暗示"(Lock hint)) 是一种软件设计模式用来减少并发系统中竞争和同步的开销。有时候会在单例模式里遇到这个双重检查锁定,这个技术是单例模式的一种具体的实现,通过它来进行单例模式里的延迟初始化,保证在经过延迟初始化之后还是只有一个单例类的实例被创建。

    java程序中可能需要推迟一些高开销的对象初始化操作,只有在使用这些对象时才进行初始化,所以有时候采用延迟初始化来降低初始化类和创建对象的开销,而双重检查锁定是常见的延迟初始化技术(本文主要介绍该技术但是不推荐使用它,后面会进行分析)。

    以下是非线程安全的延迟初始化案例:

    public class UnsafeLazyInitialization {

        private static Instance instance ;

        public static Instance getInstace(){

            if(instance == null)              //1.A线程执行

            instance =new Instance(); //2.B线程执行

        return instance;

        }

    }

    至于为什么是线程不安全,在线程A执行代码1的时候线程B执行代码2,线程A可以看见instance引用的对象还没有完成初始化。可以对getInstance方法做同步处理来实现线程安全的延迟初始化(加关键字synchronized),但是处理之后如果被频繁调用就会导致执行性能下降。如果不会被频繁使用就会提供一个较好的性能。

    但

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值