CAS:compare and swap,翻译起来就是比较并交互。
CAS有三个操作数,分别是内存值V,旧的预期值A,要修改的值B。只有当内存值和预期值相同的时候,才会把内存值修改为B,否则就什么也不做。CAS可能会出现ABA的问题,如果一个值原来是A,变成了B,然后又变成A,那么使用CAS检查就会发现它的值没有变化,而实际上是变化了。可以通过版本号来解决这个问题,每次变量更新的话就把版本号加1,那么A-B-A就会变成 1A-2B-3A。还可以通过AutomicStampedReference来解决这个问题。这个类的compareAndSet方法会先检查当前引用是否等于预期引用,还有当前表示位是否等于预期标记位,如果相等就将当前引用和标志位设置为给定更新的值。
CAS
最新推荐文章于 2025-02-27 09:41:26 发布