十、CAS

一、什么是CAS

Compare And Swap的缩写,中文翻译成比较并交换,实现并发算法时常用到的一种技术。它是一条CPU的原子指令,包含三个操作数——内存位置、预期原值及更新值。

执行CAS操作的时候,将内存位置的值与预期原值比较。

如果相匹配,那么处理器会自动将该位置值更新为新值。

如果不匹配,处理器不做任何操作,多个钱程同时执行CAS操作只有一个会成功。

缺点:

1、如果CAS失败,会一直进行尝试。如果CAS长时间一直不成功,可能会给CPU带来很大的开销。

2、CAS会导致“ABA问题”。(比如说一个线程1从内存位置V中取出A,这时候另一个线程2也从内存中取出A,并且线程2进行了一些操作将值变成了B,然后线程2又将V位置的数据变成A,这时候线程one1进行CAS操作发现内存中仍然是A,然后线程1操作成功。尽管线程1的CAS操作成功,但是不代表这个过程就是没有问题的。|)

二、什么是Unsafe

Unsafe是CAS的核心类,由于Java方法无法直接访问底层系统,需要通过本地(native)方法来访问,Unsafe相当于一个后门,基于该类可以直接操作特定内存的数据。Unsafe类存在于sun.misc包中,其内部方法操作可以像C的指针一样直接操作内存,因为Java中CAS操作的执行依赖于Unsafe类的方法。

注意Unsafe类中的所有方法都是native修饰的,也就是说Unsafe类中的方法都直接调用操作系统底层资源执行相应任务。

原文地址:https://www.cnblogs.com/shiblog/p/15741511.html