CAS
- synchronized关键字与Lock等锁机制都是悲观锁:无论做何种操作,首先都需要先上锁,接下来再去执行后续操作,从而确保了接下来的所有操作都是由当前这个线程来执行的。
2.乐观锁:线程在操作之前不会做任何预先的处理,而是直接去执行;当在最后执行变量更新的时候,当前线程需要有一-种机制来确保当前被操作的变量是没有被其他线程修改的; CAS是乐观锁的一种极为重要的实现方式。
CAS (Compare And Swap)
比较与交换:这是一个不断循环的过程,一直到变量值被修改成功为止。CAS本身是由硬件指令来提供支持的,换句话说,硬件中是通过一个原子指令来实现比较与交换的;因此,CAS可以确保变量操作的原子性的。
对于CAS来说,其操作数主要涉及到如下三个:
1.需要被操作的内存值v
2.需要进行比较的值A
3.需要进行写入的值B
只有当v==A的时候,CAS才会通过原子操作的手段来将v的值更新为B。
关于CAs的限制或是问题:
1.循环开销问题:并发量大的情况下会导致线程一直自旋
2.只能保证一一个变量的原子操作:可以通过AtomicReference来实现对多 个变量的原子操作
- ABA问题: 1 -> 3 ->1 (可以考虑增加版本号)
网友评论