什么是CAS
CAS是现代处理器内部实现,用于解决在多线程环境下,通过对同一内存地址的值进行修改时,确保该操作,是原子的。
主要实现原理,在提交修改时,将该内存地址中原值进行取出,与传入的旧值进行比较,如果一致,那么将新值写入该内存地址。
在Java中,提供了三种类型操作类:
普通类型
AtomicInteger:用于对整形数据的修改
AtomicIntegerArray:用于对数组整形成员进行修改,每次修改时,需要额外提供数组索引下标。
引用类型
AtomicReference 用于修改该内存地址的引用 AtomicStampedReference 用于解决ABA问题而产生,在每次修改前,可以取出版本号进行比较。两个参数,第一个参数为泛型V,第二个参数为初始版本号
AtomicMarkableReference 也是用于解决ABA问题,不过第二个参数为布尔型,其关注该值有没有被修改过,与AtomicStampedReference的区别在于,AtomicStampedReference关心的是值被修改了几次
引用字段类型