游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

并发编程进阶三深入理解锁机制

  作者浩说编程
  来源公众号:浩说编程
  〔大厂技术资源研发必备安装包限时免费获取〕
  通过前两篇的内容我们了解了并发的潜在问题,以及解决部分潜在问题的方法。
  本篇我们继续探寻如何解决并发的原子性问题?
  前文回顾
  并发编程进阶一:从并发引发的潜在问题开始
  并发编程进阶二:搞定可见性、有序性问题,用‘它‘就够了
  读者的收获
  1、锁的概念
  2、Java提供的锁技术:synchronized
  3、锁和资源的对应关系
  4、互斥锁
  码文不易
  你的关注是浩说编程持续更新的动力
  浩说编程会做的更好
  一、锁的概念
  通过之前的文章我们了解到,并发的原子性问题是由线程切换引起的。
  那么我们如果能够做到在需要的时候禁止线程切换,原子性问题就能有效解决。
  锁的概念由此产生,它的作用是保证我们的业务代码在同一时刻只能被一个线程所执行。
  需要注意的是,锁和受保护的资源存在对应关系。
  也就是说资源A的锁LOCKA只能保护资源A,资源B的锁LOCKB只能保护资源B,LOCKA无法保护B,这点很重要。
  二、Java提供的锁技术:synchronized
  Java通过关键字synchronized来隐式的实现上边提到的锁机制,它用来修饰方法、代码块,其中的内容被叫做临界区。
  在使用synchronized之后,Java会隐式的在对应方法、代码块前后分别加入加锁lock()、解锁unlock()操作。
  这种隐式操作的好处是能够保证加锁和解锁一定是成对出现的,避免忘记某个操作而造成事故级别的线程等待BUG。
  修饰静态方法:classTest{synchronizedstaticvoidmethod(){临界区}}12345
  还记得上面提到的锁和受保护的资源的一一对应关系吗?当synchronized修饰静态方法时,受保护的资源是当前类的Class对象。
  相当于:classTest{synchronized(Test。class)staticvoidmethod(){临界区}}12345
  修饰非静态方法时,受保护的资源是当前类的实例对象thisclassTest{synchronizedvoidmethod(){临界区}}12345
  相当于:classTest{synchronized(this)voidmethod(){临界区}}12345
  修饰代码块时,受保护的资源是传递的参数,这里是obj:classTest{修饰代码块ObjectobjnewObject();synchronized(obj){临界区}}1234567
  在了解了上面的内容之后,我们就可以使用synchronized来尝试解决第一篇中count1可能引发的原子性问题:classTest{intvalue0;synchronizedvoidaddOne(){value1;}}123456
  补充的HappensBefore原则
  还记得上一篇文章中提到的HappensBefore原则吗?
  写到这里,需要补充一条关于锁的HappensBefore原则:对一个锁的解锁HappensBefore于后续对这个锁的加锁。
  这个含义可以理解成前一个线程的解锁操作对后一个线程的加锁操作可见。
  也就是说前一个线程在临界区修改的共享变量(该操作在解锁之前),对后续进入临界区(该操作在加锁之后)的线程是可见的。
  所以对于上面这个例子,在线程1执行完addOne方法之后,线程2在进入addOne方法时看到的value一定是1,可见性问题得以保证。
  三、互斥锁
  我们为上面的代码例子增加一个方法,用来获取value:classTest{intvalue0;synchronizedvoidaddOne(){value1;}获取valueintgetValue(){returnvalue;}}12345678910
  试想一下,当某个线程在执行addOne方法时,其他线程同时在执行getValue方法。这个时候两个方法中的value值是否一直呢?
  按照现在的写法,当线程执行addOne方法时,由于getValue方法没有加锁,所以即便在addOne方法中value的值变为了1,对于getValue方法来说依然不可见,所以拿到的value不一定是1。
  想要解决这个问题,我们可以利用锁的互斥性去做,互斥性是指:对于同一个锁修饰的不同方法,在同一时刻只能执行一个。
  于是代码可以这样改进,在getValue方法前使用synchronized:classTest{intvalue0;synchronizedvoidaddOne(){value1;}获取valuesynchronizedintgetValue(){returnvalue;}}12345678910
  这样一来,两个方法的锁都是this,所以并发的时候,如果addOne方法先拿到了this锁,那么在方法执行完并释放this锁之前,getValue方法就无法获取到this锁,也就形成了互斥关系,保证了value的可见性。
  混淆的互斥锁
  对于锁的互斥性,我们可能会产生混淆的情况,还是上面的例子,我们把addOne方法修改成static静态的:classTest{intvalue0;synchronizedstaticvoidaddOne(){value1;}获取valuesynchronizedintgetValue(){returnvalue;}}12345678910
  结合本篇所学,试想一下这两个方法还存在互斥关系吗?你可以回看一下上面提到的互斥锁的关键点:同一个锁。
  由于addOne方法变成了静态,所以锁变成了Test。Class,而getValue方法的锁是this,锁不同了自然也就不存在互斥性了,就会引发最初的可见性问题,这点需要特别注意。
  以上就是本篇关于锁的知识探索,总结一下本篇的大纲:锁的概念、Java提供的锁技术:synchronized、锁和资源的对应关系、互斥锁。浩说编程,帮你学到更多。
  作者浩说编程
  来源公众号:浩说编程

oppoReno6pro在Reno6的基础上提升了哪些?我来这两款手机出来也有几天了,作为pro版本,我们就来看看在基础的Reno6版本上,提升了哪些?首先我有必要对大家讲一讲,如果你只是对手机的颜值和拍照有要求的话,对性能要求并……马斯克问了以太坊创始人一个最大的存在主义问题什么是爱?回答很以太坊创始人维塔利克布特林(VitalikButerin)周四在推特上进行一场AskMeAnything(问我任何事)活动,允许其关注的推特用户提问。特斯拉CEO马斯克意外出现……传闻魅族将被吉利收购没落贵族等来救世主?本报记者贾丽当下,造汽车的手机厂商并不少见。如今,吉利、特斯拉等汽车大佬也开始造手机了,甚至吉利可能要掀起首个跨界收购案。近日,有消息称,国产汽车巨头吉利集团计划收……6G通信标准专利布局已进入关键期相较于2G通信网络,3G实现了移动宽带,但真正展现移动宽带的作用是在4G时代。而5G通信网络相比4G更加强调工业物联网和万物互联,但相关应用场景和杀手级应用尚在早期构建中,真正……让手机应用长辈版更贴心来源:人民网人民日报手机应用纷纷推出关怀版长辈版,助力老年人跨越数字鸿沟。相信随着适老化改造不断深入,贴心暖心的举措会越来越多近年来,我国数字社会建设步伐加快,互联……官方紧急回应!B站隐私泄露事件的来龙去脉(文末附防范指南)近日,有网友在社交平台发文称其发现B站(bilibili)有人发布了涉嫌侵犯个人隐私的视频在平台上,该文顿时引发网友热议。据该网友透露,他按日常习惯浏览B站视频的时候,他……将与高通合作?明天将发布的华为新平板,还有哪些惊喜华为此前宣布,将会在六月二日发布全新平板产品华为MatePadPro,惊觉就是明天了。目前已经确定的消息是,华为这款新平板产品将是首款搭载鸿蒙系统的平板,而且将会配备全新的HU……湖北广电,九安医疗,国联水产,美盛文化,京东方,格力电器加油始终看好科技和消费。美盛文化是元宇宙概念。湖北广电是元宇宙概念。三一重工是工程机械概念。九安是医疗检测概念龙头。横店东磁是永磁电机概念。南大光电是光刻胶材料概念。至纯科技是清洗……公司需要一套软件来管理公司的客户和潜在客户,有什么软件推荐吗企业的类型不同,所需的CRM类型也是不同,不同的CRM系统能够满足不同需求的企业,企业在选择CRM的时候,要根据自身情况,选择适合且符合预算的CRM系统。而通过近年来兴起……9月1号微信支付后推荐关注公众号功能将下线,你怎么看?微信支付是微信与财付通合作,在2013年8月5日,推出的第三方支付平台。虽然它的出现晚于支付宝,但是它影响力,现在已经超过支付宝了。现在人们通过微信支付,基本上可以完成所有的消……聊聊笔记本电脑界的理财产品今年的笔电行业属于旱的旱死,涝的涝死。头部渠道手握货源,像中东卖石油的土豪一样牛气冲天。而渠道小商贩,只能和黄牛博弈,靠着各种关系拉点货来养家糊口。笔记本电脑……实时监控提供更安全防护小米全自动智能门锁Pro体验智能门锁发展到现在功能越来越丰富,在解决了锂电池供电的摄像头续航问题之后,可视门铃的功能也是被集成到智能门锁上,安装门锁之后就可以实现猫眼的功效,取代了普通的智能猫眼实现了监控……
精致小巧,设计内敛的雷柏V86061相信大家对于机械键盘并不陌生,相比低廉的薄膜键盘,这个差点因成本高昂而被淘汰的产物,随着大家消费能力的提升,又回归到大众眼前,而回归的原因也很简单,那就是相比薄膜键盘更舒适的按……南卡枕中宝Zzzz,一款可以睡着听的骨传导蓝牙音箱随着这几年骨传导耳机的发展,骨传导这一个概念已不再陌生,但是说到骨传导,人们的第一印象还是骨传导耳机。而喜欢创新的南卡,最近却推出了一款颠覆传统概念的骨传导产品骨传导蓝牙音箱。……335页DevOps实践指南,全面系统,零基础也能读懂一提DevOps,大家都不会感到陌生。近年来DevOps频频出现在各大技术社区和媒体的文章中,备受业内人士追捧。那么DevOps该怎么学怎么用呢?今天给大家整理的这份De……OPPOFindX3Pro10亿色双主摄120Hz屏很久以前,对于大哥大的需要是打电话,科技的进步让砖式的大哥大瘦身成功,并带上了相相机的功能,而最新发布的OPPOFindX3Pro给用户带来了旗舰级的拍照体验,感谢新浪众测,让……不仅超越对手与自己,还不讲机德,redminote9上手体验11月26号Redmi正式发布了RedmiNote系列的三款新品,分别是RedmiNote9Pro、RedmiNote95G版本、RedmiNote94G版本。对于这定位中端机……又一神药被扫进垃圾堆!27年赚中国女性490亿,秘方是9万所从上个世纪90年代开始,中国家庭开始逐渐富裕起来,很多人开始注意身体保健。于是中国就出现了大量的中药保健产品,如红桃K、蚁力神和三株等等,以及西药保健的品牌如脑白金、昂立一号和……努比亚618大促优惠更新,红魔6R及红魔6加入立减优惠快到618年中钜惠最具看点的时期了,很多人在后台留言:能不能推荐一些新的手机优惠政策。本着认真负责的态度,笔者在网上筛选了两天,结果发现全网仅努比亚做到了最高优惠1500元,而……国民视觉健康高峰论坛李绍伟建言青少年视力保护应筑好三道墙9月16日下午,由人民网主办的第三届国民视觉健康高峰论坛在人民日报社新媒体大厦一号演播厅举办。本次论坛以数说眼健康,守护新视界为主题,以我国全龄段人群眼健康关键性数据作为切入,……从1994年开始,重新开始认识斯嘉丽约翰逊9岁到36岁【明信片】Vol。12如果你见识了她的清醇美丽,那么就不会忘记那个俏皮的鼻尖,闪动的眼神以及所有部位的具杀伤力的尤物。其实,喜欢她的所有人都并不只想她变成一个用身体对话的演员,……千元机皇降临,realme真我Q3系列正式发布realme真我Q2系列在去年获得了消费者和市场的一致好评,在发布会上,徐起表示全渠道好评率高达98,成为relame在中国市场首个销量破百万的爆款。这次在realme真我Q3……医药电商不该只是卖卖药轻松赚钱更应守护患者用药安全在医院,每一位工作人员都在努力守护你的健康。医生,为你诊断疾病,提供治疗方案;护士,为患者无私奉献,在医生、患者和家属之间充当桥梁;而还有另一群人,在一间大房子里来回奔波,在数……新车到店实拍长安欧尚X7PLUS,国产车优势不仅配置高那么简2021年,又是新车不断的一年。今年上半年,上市新车多达上百款之多,尤其是中国品牌,更在市场上不断布局,推出新产品,一方面来吸引消费者注意力,另一方面来提升品牌的市场占有。盘点……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网