CAS

CAS

算法介绍
  • CAS(比较与交换,Compare and swap) 是一种有名的无锁算法。
  • CAS具有原子性
  • CAS, CPU指令,在大多数处理器架构,包括IA32、Space中采用的都是CAS指令,CAS的语义是“我认为V的值应该为A,如果是,那么将V的值更新为B,否则不要更改该位置,只告诉我这个位置现在的值即可
  • CAS是项 乐观锁 技术,当多个线程尝试使用CAS同时更新同一个变量时,只有其中一个线程能更新变量的值,而其它线程都失败,失败的线程并不会被挂起,而是被告知这次竞争中失败,并可以再次尝试。
  • CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B。当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做。
  • 在JAVA中,sun.misc.Unsafe 类提供了硬件级别的原子操作来实现这个CAS。
  • sun.misc.Unsafe中的value是用来存储整数的时间变量,这里被声明为volatile
  • java.util.concurrent 包下的大量类都使用了这个 Unsafe.java 类的CAS操作。
使用场景
  • 在Java语言中,++i和i++操作并不是线程安全的,在使用的时候,不可避免的会用到synchronized关键字。而AtomicInteger则通过一种线程安全的加减操作接口。
class MyThread implements Runnable {
//    static  int i = 0;
     static AtomicInteger ai=new AtomicInteger(0);
      
 
    public void run() {
        for (int m = 0; m < 1000000; m++) {
            ai.getAndIncrement();
        }
    }
};
 
public class TestAtomicInteger {
    public static void main(String[] args) throws InterruptedException {
        MyThread mt = new MyThread();
 
        Thread t1 = new Thread(mt);
        Thread t2 = new Thread(mt);
        t1.start();
        t2.start();
        Thread.sleep(500);
        System.out.println(MyThread.ai.get());
    }
}
posted @ 2019-02-01 11:16  技术-刘腾飞  阅读(409)  评论(0编辑  收藏  举报