8.5 CAS

2018-01-09  本文已影响0人  jadefly

概念

JNI(Java本地方法):使得java程序越过JVM直接调用本地方法提供了一种便捷的方式;

CAS:1.是现代 CPU 广泛支持的一种对内存中的共享数据进行操作的一种特殊指令,会对内存中的共享数据做原子的读写操作;

            2.compare and swap比较并交换,利用CPU的CAS指令,同时借助JNI来完成Java的非阻塞算法;

            3.有3个操作数,当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则返回V;

            4.Synchronized是一种悲观锁,它认为在它修改之前,一定会有其它线程去修改它,悲观锁效率很低;

            5.CAS是乐观锁的思路,它相信在它修改之前,没有其它线程去修改它;


存在问题

1.ABA问题:如果一个值原来是A,变成了B,又变成了A,那么使用CAS进行检查时会发现它的值没有发生变化,但是实际上却变化了;

2.循环时间长开销大:自旋CAS如果长时间不成功,会给CPU带来非常大的执行开销;

3.只能保证一个共享变量的原子操作:多个共享变量操作时,循环CAS就无法保证操作的原子性;


上一篇下一篇

猜你喜欢

热点阅读