CAS(乐观锁)
1.什么是CAS CAS(Compare And Swap)比较并替换,是线程并发运行时用到的一种技术; 2.CAS作用 乐观锁 3.其他锁机制缺点 在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁。 锁机制存在以下问题: (1)在多线程竞争下,加锁、释放锁会导致比较多的 上下文切换和调度延时,引起性能问题 。 (2)一个线程持有锁会导致其它所有需要此锁的 线程挂起 。 (3)如果一个优先级高的线程等待一个优先级低的线程释放锁会导致 优先级倒置 ,引起性能风险。 volatile是不错的机制,但是 volatile不能保证原子性。 因此对于同步最终还是要回到锁机制上来。 独占锁是一种悲观锁,synchronized就是一种独占锁,会导致其它所有需要锁的线程挂起,等待持有锁的线程释放锁。而另一个更加有效的锁就是乐观锁。所谓乐观锁就是,每次不加锁而是假设没有冲突而去完成某项操作,如果因为冲突失败就重试,直到成功为止。 4.CAS实现 CAS需要三个指令,分别是内存位置(JAVA中的内存地址,V),旧的预期值(A)和新值(B)。CAS执行时,当且仅当V符合预期A的时候,新值更新V的值,否则不执行更新,但是最终都会返回V的旧值,上述的处理过程就是一个原子操作。 (图片来源网络) 比如:要将上图中的CPU1要将56更新为57