天天看点

07Java多线程-29. CAS算法

在谈CAS算法时,我们先来了解一下无锁的概念。

无锁分为以下两大派系:

对于乐观派系而言,它们认为事情总会往好的方向去发展,总是认为坏的情况发生概率特别小,可以无所顾忌的做任何事情;

对于悲观派系而言,它们总会认为发展事态如果不及时控制,以后就无法挽回,即时此种局面不会发生的情况下。

上述两大派系映射到并发编程中就如同加锁与无锁策略,即加锁是一种悲观策略,无锁是一种乐观策略,因为对于加锁的并发程序来说,它们总是认为每次访问共享资源时总会发生冲突,因此必须对每一次数据操作实施加锁策略。而无锁则总是假设对共享资源的访问没有冲突,线程可以不停执行,无需加锁,无需等待,一旦发现冲突,无锁策略则采用一种称为CAS的技术来保证线程执行的安全性,这项CAS技术就是无锁策略实现的关键。

什么是CAS?

CAS全称为Compare And Swap即比较并交换,其算法公式如下:

函数公式:CAS(V,E,N)V:表示要更新的变量E:表示预期值N:表示新值

07Java多线程-29. CAS算法