美文网首页
Java-乐观锁和悲观锁 ReentrantLock和Syn

Java-乐观锁和悲观锁 ReentrantLock和Syn

作者: 小小的coder | 来源:发表于2020-01-06 10:43 被阅读0次

悲观锁:每次访问数据线程都是处于阻塞的状态,这样提高安全性,像读锁,写锁都是用到了悲观锁,以及synchronize关键字(独占锁);

乐观锁:每次访问数据线程都是运行状态,这样可以提高数据吞吐量

悲观锁是挺好的,也很安全,但有缺点:
1.可能会导致优先级高的线程等待优先级低的线程导致优先级倒序;
2.加锁,放锁次数过多,引起性能问题

乐观锁:就假定不会发生并发冲突,最后通过比较数据来查看是否真的发生了冲突,并交由用户来决定。
最典型的实现方式是CAS(compare and swap):

CAS:
当多个线程使用CAS获取锁,只能有一个成功,其他线程返回失败,继续尝试获取锁;
CAS操作中包含三个参数:V(需读写的内存位置)+A(准备用来比较的参数)+B(准备写入的新值):若A的参数与V的对应的值相匹配,就写入值B;若不匹配,就写入这个不匹配的值而非B;

20180827200220265.png

ReentrantLock和Synchronize区别:
锁的实现:
Synchronized是依赖于JVM实现的,而ReenTrantLock是JDK实现的,有什么区别,说白了就类似于操作系统来控制实现和用户自己敲代码实现的区别。前者的实现是比较难见到的,后者有直接的源码可供阅读。

便利性:
很明显Synchronized的使用比较方便简洁,并且由编译器去保证锁的加锁和释放,而ReenTrantLock需要手工声明来加锁和释放锁,为了避免忘记手工释放锁造成死锁,所以最好在finally中声明释放锁。

ReenTrantLock可以指定是公平锁还是非公平锁。而synchronized只能是非公平锁。所谓的公平锁就是先等待的线程先获得锁
————————————————
原文链接:https://blog.csdn.net/emmmsuperdan/article/details/82118405

相关文章

  • Java-乐观锁和悲观锁 ReentrantLock和Syn

    悲观锁:每次访问数据线程都是处于阻塞的状态,这样提高安全性,像读锁,写锁都是用到了悲观锁,以及synchroniz...

  • 并发参数

    悲观锁与乐观锁 悲观锁 synchronized和ReentrantLock等独占锁就是悲观锁思想的实现乐观锁一般...

  • 看完你就知道的乐观锁和悲观锁

    看完你就知道的乐观锁和悲观锁 Java 锁之乐观锁和悲观锁 [TOC] Java 按照锁的实现分为乐观锁和悲观锁,...

  • 乐观锁和悲观锁

    参考来源 深入理解乐观锁与悲观锁 乐观锁的一种实现方式——CAS mysql乐观锁总结和实践 乐观锁和悲观锁 悲观...

  • 重温系列之多线程并发:Java锁

    乐观锁与悲观锁 自旋锁 Synchronized锁 ReentrantLock Semap0hore信号量 Ato...

  • 锁的概述

    乐观锁与悲观锁 悲观锁 乐观锁和悲观锁的概念出自数据库,但在java并发包中也引入和类似的概念(乐观锁/悲观锁是一...

  • CAS 与原子操作

    乐观锁与悲观锁 锁可以从不同的角度分类。其中,乐观锁和悲观锁是一种分类方式。 乐观锁:乐观锁又称为“无锁”。乐观锁...

  • MySQL之乐观锁·MVCC

    一、 乐观锁 和 悲观锁 乐观锁 和 悲观锁 是实现并发操作的两种不同的 加锁思想,其中: 乐观锁 假设:操作能成...

  • Mysql锁

    按照使用方式,锁分为: 悲观锁 乐观锁 乐观锁 概念就不细讲了,乐观锁和悲观锁的区别是乐观锁是假设在修改数据之前,...

  • 蚂蚁面试

    1、mysql乐观锁和悲观锁的区别? 乐观锁通过MVCC,版本实现,悲观锁select... for update...

网友评论

      本文标题:Java-乐观锁和悲观锁 ReentrantLock和Syn

      本文链接:https://www.haomeiwen.com/subject/nrwhactx.html