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就无法保证操作的原子性;