如何深入理解Java多线程与并发框中的CAS-创新互联

如何深入理解Java多线程与并发框中的CAS,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

目前创新互联公司已为上千余家的企业提供了网站建设、域名、网页空间、网站托管运营、企业网站设计、莎车网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。

CAS实现原理

CAS 是 CompareAndSwap 的缩写,意思是 比较 并 交换。 它是无锁化的实现是经典的乐观锁。

CAS 操作很简单,它包含三个操作数:内存地址V、预期原值A、新值B。先比较内存地址V处的值与预期原值A是否相等,如果相等就将内存地址V处更新为新值B。在配合循环使用时,若CAS操作失败,会循环执行或到达某个终止处。此操作配合 循环 使用时,又称为 自旋锁 的实现方式。

CAS存在的问题

1. ABA的问题

比如一个线程操作时,先将内存地址V处的值A更新为值B,然后又将值B更新为值A。最后CAS判断内存地址V处的没有变化,认为操作更新未成功,但实质上是已经更新过了。这就是经典的 ABA问题。

解决方法:

  • 加时间戳:

  • 加版本号:

2. 循环开销大

CAS 这种也是乐观锁,如果线程较多、资源抢占激烈、命中率低的情况下,不断的循环会不断的消耗资源。实现上,可以设置大循环数,达到大循环数还没有占有资源就自动放弃,避免无限的循环。

3. 最多只能保证一个共享变量的操作

CAS 最多只能操作一个共享变量,单体效率低。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注创新互联-成都网站建设公司行业资讯频道,感谢您对创新互联的支持。

网站题目:如何深入理解Java多线程与并发框中的CAS-创新互联
分享网址:https://www.cdcxhl.com/article28/csogcp.html

成都网站建设公司_创新互联,为您提供网站设计公司建站公司关键词优化网站建设网站改版做网站

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

网站托管运营