自旋锁、阻塞锁、重入锁、偏向锁、轻量锁和重量锁
来源:互联网 发布:陈田拆车件有淘宝店吗 编辑:程序博客网 时间:2024/05/16 11:09
1、自旋锁:
采用让当前线程不停的在循环体内执行实现,当循环的条件被其它线程改变时才能进入临界区
举例如下:
优缺点分析:
由于自旋锁只是将当前线程不停地执行循环体,不进行线程状态的改变,所以响应速度更快。但当线程数不停增加时,性能下降明显,因为每个线程都需要执行,占用CPU时间。如果线程竞争不激烈,并且保持锁的时间段。适合使用自旋锁。
2、阻塞锁:
阻塞锁改变了线程的运行状态,让线程进入阻塞状态进行等待,当获得相应的信号(唤醒或者时间)时,才可以进入线程的准备就绪状态,转为就绪状态的所有线程,通过竞争,进入运行状态。
优缺点分析:
阻塞锁的优势在于,阻塞的线程不会占用cpu时间,不会导致 CPu占用率过高,但进入时间以及恢复时间都要比自旋锁略慢。在竞争激烈的情况下 阻塞锁的性能要明显高于自旋锁。
3、重入锁:
Java中的synchronized同步块是可重入的。这意味着如果一个java线程进入了代码中的synchronized同步块,并因此获得了该同步块使用的同步对象对应的管程上的锁,那么这个线程可以进入由同一个管程对象所同步的另
一个java代码块。
ReentrantLock与synchronized比较:
- 前者使用灵活,但是必须手动开启和释放锁
- 前者扩展性好,有时间锁等候(tryLock( )),可中断锁等候(lockInterruptibly( )),锁投票等,适合用于高度竞争锁和多个条件变量的地方
- 前者提供了可轮询的锁请求,可以尝试去获取锁(tryLock( )),如果失败,则会释放已经获得的锁。有完善的错误恢复机制,可以避免死锁的发生。
优缺点分析:
可重入锁的最大优点就是可以避免死锁。缺点是必须手动开启和释放锁。
偏向锁、轻量锁和重量锁的优缺点总结如下:
阅读全文
0 0
- 自旋锁、阻塞锁、重入锁、偏向锁、轻量锁和重量锁
- 自旋锁、阻塞锁、重入锁、偏向锁、轻量锁和重量锁
- 锁原理:偏向锁、轻量锁、重量锁
- jvm第7节-锁(偏向锁,轻量锁,自旋锁)
- 锁--自旋锁、阻塞锁、可重入锁、悲观锁、乐观锁、读写锁、偏向所、轻量级锁、重量级锁、锁膨胀、对象锁和类锁
- 自旋锁、阻塞锁、可重入锁、悲观锁、乐观锁、读写锁、偏向所、轻量级锁、重量级锁、锁膨胀、对象锁和类锁
- 轻量锁 偏向锁
- 偏向锁和轻量级锁
- 轻量级锁和偏向锁
- Java线程并发中常见的锁--自旋锁 偏向锁 轻量级锁 轻量级锁
- java 中的锁 -- 偏向锁、轻量级锁、自旋锁、重量级锁
- 虚拟机内的锁优化(偏向锁,轻量级锁,自旋锁,重量级锁)
- java 中的锁 -- 偏向锁、轻量级锁、自旋锁、重量级锁
- 虚拟机中的锁优化简介(适应性自旋/锁粗化/锁削除/轻量级锁/偏向锁)
- 虚拟机中的锁优化简介(适应性自旋/锁粗化/锁削除/轻量级锁/偏向锁)
- 虚拟机中的锁优化简介(适应性自旋/锁粗化/锁削除/轻量级锁/偏向锁)
- 1.6的锁优化(适应性自旋/锁粗化/锁削除/轻量级锁/偏向锁)
- 偏向锁,轻量级锁,自旋锁,重量级锁的详细介绍
- AttributeError: 'module' object has no attribute 'Spider' 解决了
- c#快速入门简写
- Java并发编程
- Python3
- Spring核心AOP(面向切面编程)
- 自旋锁、阻塞锁、重入锁、偏向锁、轻量锁和重量锁
- OCR移动端车牌识别SDK
- SSH框架整合过程(Struts2+Spring+Hibernate
- MyEclipse+Tomcat配置
- String类中的compareTo方法
- 08020001
- 基于DRBD实现MySQL高可用
- 帆起航,再踏征程(一)
- Linux 基础入门-教程文档