推广

Java中CAS原理分析(volatile和synchronized浅析)

iseeyu2年前 (2024-02-22)推广129

保证i++原子性

你一定会有一个疑,被 volatile 修饰的变量i,i++为什么会有线程安全问题呢,也就是原子性的问题,我们还是举一个经典的i++案例一步步分析吧!我们知道在多线程情况下volatile保证了共享变量的可见性,顺序行,但唯独不能保证原子性,原因是i++是一个复合操作,大致可以分成3步,1.先从主内存拿到最新的i值,2.将i加1这个操作保存到操作数栈,3.从栈中取出i加1的值写回到主内存。OK,当线程AB同时执行i++操作时,比如线程A先获取时间片,执行完第2步,这是线程A还未执行完,时间片分配给线程B,B顺利执行完所有操作后并同步了主内存,假设我们i的初始值是1,那么此时主内存值是2,因为线程B执行完毕,cpu时间片又回到线程A手上,做第3步操作,此时同步到主内存的值还是2,看,线程A,B各做了一次加1的操作,但最终结果可能是2,cas的作用就来了,他能保证i++操作的原子性,为什么能保证原子性呢?cas可以把上面三个操作合并成一个操作,是原子的。

有什么好处?

大家都知道解决多线程安全需要用到锁的,可以用 synchronized 来解决,但是synchronized也有它的劣势,最主要是它是阻塞的,阻塞会有什么问题?性能啊,这是计算机人不能忍的,频繁内核外核切换,会严重浪费系统资源,所以就提了cas这个乐观锁概念,它是非阻塞的,操作系统不用在内核态与用户态来回切换,相当于用while循环方式获取锁,在性能上有一定提升。即使这样,也会有一定问题,下面我们来看看。

有什么问题?

1.ABA问题。

这个案例比较简单,线程A把共享变量i,从1变成2,再变成1,线程B想把i变成2,本来应该是不会成功,因为即时变量i现在是1,但是它的状态变化了,他的解决方案是版本号。相当于修改成功一次版本号增加1,就可以解决了,曾经被面试官问到一个问题,cas是线程安全的吗?答案不是线程安全的。

2.自旋时间过长。

如果一个线程拿到锁后,一直不释放,其他线程就只能一直循环等待。

3.只能保证一个共享变量的原子性。

像Automic包下面的基本上都只能保证一个变量的原子性。

JUC包下面使用!

可能有些童鞋看JDK源码会比较纠结一个点, 发现volatile关键字一般都会和cas连用,如果不要volatile会怎么样呢 ?cas本身只作用于方法,cas对共享变量没有约束,如果不对共享变量做volatile修饰,是不可见的,不能够保证共享变量的实效性,需要等待共享变量主动同步到主内存,这是需要花时间的,效率更低下,所有在JUC并发包里一直可以看到这样的 volatile关键字一般都会和cas 组合。

总结

这篇文章,我们先引出了cas概念,并且说明了它的优缺点,做了案例介绍,简单的和synchronized关键字做了比较,最后,深入的说明了 volatile关键字 和 cas连用的效率, 这是我在深入思考后得到的结论,分享给大家。

扫描二维码推送至手机访问。

版权声明:本文由西安泽虎代运营发布,如需转载请注明出处。

转载请注明出处https://0291.com.cn/post/56124.html

相关文章

搜索引擎 百度 霸屏 广告 是什么 怎么做?

百度霸屏这个词听起来蛮高大尙的,那到底什么是百度霸屏技术呢,最简单的定义就是:当用户在搜索某个关键词时,网页上出来的基本全是你的信息,霸占了搜索引擎的前几页,甚至前十页。如果能够占据关键词信息的80%以上那就算是一个非常成功的霸屏。 百度霸屏有什么作...

21年淘宝用户信息泄露事件

21年淘宝用户信息泄露事件

你有一醒来发现被拉进陌生群聊,或经常有陌生人添加你的微信吗?如果有,那么你的个人信息可能遭到了泄露,这不是看上去那么简单。 21年一名住在河南商丘市的本科毕业的大学生逯某自2019年11月起,对淘宝实施了长达八个月的数据爬取并盗走大量用户数据。在阿里巴巴注意到这一问题前,已经有超过11亿8千多...

记录网站关键词排名不好的原因。

记录网站关键词排名不好的原因。

目前,许多企业在互联网上开展了营销网站建设和业务活动。但通常在网上之后,关键词在大多数网站上的排名效果并不理想。这时,企业会问为什么我的关键词排名不好,不像其他同行网站,排名很好,为什么排名不好,但不知道为什么。 在这方面,网站建设研究技术列出了导致关键词排名不佳的八个因素,希望能够回答您的疑问。...

什么样的seo优化知识需要客户提前了解?网站做优化的核心是什么。

什么样的seo优化知识需要客户提前了解?网站做优化的核心是什么。

为了确保你的网页在搜索引擎中排名靠前,你必须具备SEO(SEO)的基本知识。以下是常见的SEO问题: 搜索引擎将重复内容定义为“与域内或域内其他内容完全匹配或相似的实质性内容块”。 影响网站的常见SEO问题是重复内容。如果网站上的内容是重复的,网站将失去选择页面排名的能力。搜索引...

营销型网站建设的用户体验度优化技巧。

营销型网站建设的用户体验度优化技巧。

在建站时,就开始以日后的营销推广为目的作为出发点,并贯彻到的每一个环节中,以使得营销型网站一上线便具备李优秀的营销功能。那么营销型网站的优化技巧有哪些你知道吗? 如何提升企业网站的客户体验是营销型企业网站必须考虑的重要问题,客户体验在我们的现代营销中无处不存在其身影。接下来介绍提高用户体...

小白如何利用短视频做引流推广

自17年以来,短视频可谓是成了营销圈最火爆的词。短视频之所以广受用户喜爱的原因就在于碎片化。今天萃见就和大家聊聊如何利用短视频进行。1.布局主流短视频平台,打造ip因为各个平台定位不同,导致用户差异大。这就要求我们必须对平台进行分析,得出用户画像,从而为自身的或产品制定不同...

现在,非常期待与您的又一次邂逅

我们努力让每一部企业宣传片和抖音短视频成为商业大片