Java 悲观锁和乐观锁比较

1.悲观锁

                多个线程竞争应用程序的共享资源

               同时只有一个线程可以获得资源的使用权,其他线程阻塞等待

                获得使用权的线程释放锁后,其他线程再次竞争资源的使用权限

2.乐观锁

           多个线程竞争应用程序的共享资源

           所有线程都可以获得资源的使用权,

          只是使用共享资源读权限的线程,直接结束

          使用共享资源写权限的线程,只有一个线程可以写成功

3.使用场景

悲观锁 乐观锁
写多读少 读多写少
并发不高 高并发
不允许脏读 允许脏读

4.实现方案

  Java 数据库
悲观锁 synchronized select ...for update
乐观锁 java.util.concurrent包 --CAS 使用版本号version控制
扫描二维码关注公众号,回复: 4125546 查看本文章

5.CAS方案的缺点

ABA问题---多个线程修改变量的值,可能经过几次修改,复合某一个线程的CAS条件,其实这个变量已经被修改了很多次
自旋CAS,不成功就一值执行下去,直至成功
只能保证一个变量的原子操作

猜你喜欢

转载自blog.csdn.net/lihongtai/article/details/83822476