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

一、乐观锁悲观锁的区别

1、为什么需要加锁?

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

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

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

二、Java提供的乐观锁实现

1、CAS乐观锁:

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

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

举例:

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

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

2、CAS的自旋问题

常出现于资源竞争激烈时

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

3、CAS的ABA问题

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

 

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

 

 

 

相关文章:

  • 2021-06-06
  • 2022-02-12
  • 2022-02-17
  • 2021-08-11
  • 2021-11-28
  • 2021-07-08
  • 2021-07-15
猜你喜欢
  • 2022-12-23
  • 2021-09-20
  • 2021-07-12
  • 2022-01-09
  • 2021-07-20
相关资源
相似解决方案