java锁cas(java锁的实现原理)

一、Java锁1.常见的锁有synchronized和Lock()①synchronized是jvm层面实现的,可以直接用,不过要锁住某个对象;lock是属于j.u.c包下的接口,用的时候要实现lock接口。②synchronized一般和wait()、notify()、notifyAll()一起使用,使用完不用释放锁;lock必须在finally里面手动释放。@lock锁与s…

大家好,又见面了,我是你们的朋友全栈君。

一、 Java锁

1.常见的锁有synchronized和Lock()
①synchronized 是jvm层面实现的,可以直接用,不过要锁住某个对象;lock是属于j.u.c包下的接口,用的时候要实现lock接口。
②synchronized一般和wait()、notify()、notifyAll()一起使用,使用完不用释放锁;lock必须在finally里面手动释放。
@lock锁与synchronized相比,lock锁添加一些其他特性,如中断锁等候和定时锁等候。
④资源竞争激励的情况下,lock性能会比synchronize好,竞争不激励的情况下,synchronize比lock性能好。

2.悲观锁与乐观锁
①悲观锁认为世界是悲观的,当去拿数据的时候就上锁,这样别人想拿这个锁就会阻塞直到拿到锁,传统的数据库用到了这种锁,像行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。再比如Java里面的同步原语synchronized关键字的实现也是悲观锁。
②乐观锁,认为一般并发是不会发生的,所以不会上锁。基于CAS(无锁编程)实现,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制(解决ABA问题)。乐观锁适用于多读的应用类型,这样可以提高吞吐量。

3.CAS是什么?
答:CAS是一种无锁思想
当多个线程尝试使用CAS同时更新同一个变量时,只有其中一个线程能更新变量的值,而其它线程都失败,失败的线程并不会被挂起,而是被告知这次竞争中失败,并可以再次尝试。

CAS里有三个操作数,原值V、预期原只A、修改数B,当V==A时才进行修改,否者竞争失败。

4.ABA问题
①如何产生的?
Thread1开始cas(1,1,2)操作,读到了val=1;的值,线程挂起
Thread2将A的值改为2又改回来,相当于值没变,但是却被修改过。
这是Thread1得到cpu,继续执行,这时判断V是否等于A,虽然相等,但事情的本质已经发生了改变。
②如何解决
加标志:在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/128456.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 嵌套对象转map

    嵌套对象转map嵌套对象转map,当对象嵌套层次太深,获取子对象的值及其不便,为解决这一问题,于是对象转mpa,有key就能得到相应的value。解决复杂json情况,尤其是当第三方json过于复杂时候很适合,如央行征信报告等。java代码://测试json,可以为一个Object对像Stringjson=”{\”success\”:0,\”errorMsg\”:\”错误消息\”,\…

  • usb转rs485测试软件,usb转rs485驱动程序

    usb转rs485测试软件,usb转rs485驱动程序usb转rs485线必须安装usb转rs485驱动程序才可以正常使用,而本次发布的这个usb转rs485驱动,就是那个东东啦。USB转485驱动程序官方版发布。。驱动压缩包中此外还包含了USB编程电缆驱动程序安装说明-485.doc,喜欢的小伙伴可以下载使用。USB转RS485串口驱动PL2303,适合WIN7/WINXP/LINUX等系统。usb转485转换器线驱动安装方法:1、在安装前可以…

  • 网站首页js幻灯片代码

    网站首页js幻灯片代码JS图片幻灯片,网站首页专用的图片特效代码,旅游网站用着最合适了,支持图片说明,每一幅图片都可以加标题和简短的文字介绍,右下角有图片切换控制按钮,示例中仅有5张图片,不过在实际应用中,你可以添加更多的图片。JS图片幻灯片*{margin:0;padding:0;}u

  • pycharm安装教程2021.2.2_eclipse环境配置

    pycharm安装教程2021.2.2_eclipse环境配置在PyCharm中如何配置Anaconda3环境软件:PyCharm2020.2.2×64;Anaconda3(64-bit)步骤如下:1.File→NewProject2.选择Newenvironment,Conda选项我的是默认选好的,没有更改3.Create即可,下一次创建新的项目默认使用Anaconda环境…

  • hadoop技术论坛日志分析—mapredu最后一步_睿派克技术论坛

    hadoop技术论坛日志分析—mapredu最后一步_睿派克技术论坛http://bbs.hadoopor.comhttp://www.hadoopor.comhttp://forum.hadoopor.comhttp://hadoop.hadoopor.comhtt

  • 虚拟机 XP激活

    虚拟机 XP激活1.安装原版windowsxp2.打开注册表regedit3.找到主键Hkey_Local_Machine\Software\Microsoft\WindowsNT\CurrentVersion\WPAEvents\4.删除子键lastWPAEventLoged(如果有的话)5.修改子键OOBETimer键值为:ffd571d68b6a8d6fd…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号