学习笔记(39):Java并发编程精讲-乐观锁CAS实现及应用

立即学习:https://edu.csdn.net/course/play/26270/326874?utm_source=blogtoedu

一、乐观锁悲观锁的区别

1、为什么需要加锁?

为了保证多个线程更新一个资源时,防止数据冲突和脏乱,做到线程安全

2、乐观锁和悲观锁的区别:

二、Java提供的乐观锁实现

1、CAS乐观锁:

CAS有很大概率会失败,因为它是先比较后设置,很可能会被其他进程抢占资源。

举例:

AtomicInteger类中的compareAndSwapInt方法是native方法是调用JNI的方法,底层是通过一个CPU指令完成

2、CAS的自旋问题

常出现于资源竞争激烈时

3、CAS的ABA问题

AtomicStampedReference怎么处理ABA问题:设定时间戳,如果线程1在T1到T2时更新了value从A变为B再变为A。那么线程2在更新value时由于时间戳对应不正确会使其更改value值时失败。

发布了73 篇原创文章 · 获赞 3 · 访问量 683

猜你喜欢

转载自blog.csdn.net/weixin_43186090/article/details/104314398