如何深入理解Java多线程与并发框中的CAS
发布时间:2023-04-25 12:42:56 所属栏目:教程 来源:
导读:如何深入理解Java多线程与并发中的CAS,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
CAS 操作很简单,它包含三个操作数:内
CAS 操作很简单,它包含三个操作数:内
|
如何深入理解Java多线程与并发中的CAS,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。 CAS 操作很简单,它包含三个操作数:内存地址V、预期值A、新值B。先比较内存地址V处的值与预期值A是否相等,如果相等就将内存地址V处更新为新值B。在配合循环使用时,若CAS操作失败,会循环执行或到达某个终止处。如果这种操作与 Loop相结合,则这种操作也被称为自旋锁的实现方式。 CAS存在的问题 1. ABA的问题 比如一个线程操作时,先将内存地址V处的值A更新为值B,然后又将值B更新为值A。最后CAS判断内存地址V处的没有变化,认为操作更新未成功,但实质上是已经更新过了。这就是经典的 ABA问题。 2. 循环开销大 CAS 这种也是乐观锁,如果线程较多、资源抢占激烈、命中率低的情况下,不断的循环会不断的消耗资源。实现上,可以设置最大循环数,在达到最大的周期数量前,没有实现资源占用,然后自动放弃了,避免无限的循环。 3. 最多只能保证完成一个共享数据库变量的初始化操作 CAS 最多只能操作一个共享变量,单体效率低。 (编辑:汽车网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
