网站首页 > java教程 正文
在高并发的场景里,除了昨天谈到的最全MySQL锁,比如:行锁、表锁、悲观锁、乐观锁、共享锁,非常影响并发性能之外。
还有今天我要谈到的Java并发场景里的各种锁,锁的冲突同样是影响并发访问性能的另外一种核心因素,同样的重要,只不过一个是针对数据库的场景,另外一个是针对Java并发场景。
今天接着分享Java并发编程里的锁,这样可以形成系统的高并发锁系列,希望对大家掌握好高并发有所帮助@mikechen
独享锁 VS 共享锁
1.独享锁
是指该锁一次只能被一个线程所持有,如下图所示:
2.共享锁
共享锁是指该锁可被多个线程所持有,如下图所示:
之前这篇文章我谈过的Java读写锁ReadWriteLock原理与应用场景详解,其读锁就是共享锁。
这样设计的原因是就是尽最大的解放并发读的操作,因为读占据了更大的访问请求,我只会在涉及少部分写的操作的时候才考虑独享锁,从而提升并发的效率。
乐观锁 VS 悲观锁
悲观锁 VS 悲观锁,在Java并发编程和数据库中都有实际的应用场景。
1.悲观锁
悲观锁它认为在它修改数据之前,一定会有其它线程去修改它,所以每次在拿数据的时候都会上锁。
典型代表就是一篇我谈到的Synchronized的底层实现原理,就是典型的悲观锁。
2.乐观锁
乐观锁,顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改。
如下图所示:
比如典型的应用就是Java并发里的CAS实现,Java并发包中的很多类都使用了CAS技术来实现乐观锁。
CAS全称 Compare And Swap,即比较与交换,就是一种乐观锁算法。
公平锁 VS 非公平锁
1.公平锁
公平锁,就是很公平,在并发环境中会按照FIFO的规则来获取锁。
如下图所示:
Java并发编程里ReentrantLock,可以指定构造函数来创建公平锁。
比如:
new ReentrantLock(true)
2.非公平锁
非公平锁就是不用正常排队来获取锁,而是上来就直接尝试占有锁。
如下图所示:
非公平锁的优点
优点:就是可以减少唤起线程的开销,整体的吞吐效率高,因为线程有几率不阻塞直接获得锁。
非公平锁的缺点
缺点就是:处于等待队列中的线程可能会饿死,或者等很久才会获得锁。
非公平锁的应用
ReentrantLock的构造函数的默认就是采用非公平锁的实现。
如下所示:
new ReentrantLock(false)
也就是说ReentrantLock里面就包含了两种锁的实现:默认就是非公平锁,可以通过修改设置true从而变成公平锁。
以上就是Java最全锁的梳理和总结,希望对大家掌握好高并发有所帮助。
-end-
阿里架构师进阶从0到1全部合集(非常全面)
- 上一篇: 最详细的图文解析Java各种锁(终极篇)
- 下一篇: Java中锁的实现方式(java中锁的概念)
猜你喜欢
- 2024-10-05 Java并发锁:偏向锁、轻量级锁、重量级锁详解
- 2024-10-05 Java 中的锁原理、锁优化、CAS、AQS 详解
- 2024-10-05 打通 JAVA 与内核系列之 一 ReentrantLock 锁的实现原理
- 2024-10-05 JAVA中锁的深入理解与解析(java中锁的种类)
- 2024-10-05 Java中的各种锁(java锁的用法)
- 2024-10-05 你不知道的java的锁机制(java锁机制详细讲解)
- 2024-10-05 知识点深度解读系列-JAVA锁(java中锁)
- 2024-10-05 Java锁的理解(java锁的概念)
- 2024-10-05 简单了解下Java中锁的概念和原理(java锁的用法)
- 2024-10-05 一文搞懂 JAVA 主流锁设计(java锁是什么)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)