您的位置 首页 java

java详解自旋锁、阻塞锁、重入锁、偏向锁、轻量锁和重量锁

1、 自旋锁

采用让当前 线程 不停的在循环体内执行实现,当循环的条件被其它线程改变时才能进入临界区

举例如下:

优缺点分析:

由于自旋锁只是将当前线程不停地执行循环体,不进行线程状态的改变,所以响应速度更快。但当 线程数 不停增加时,性能下降明显,因为每个线程都需要执行,占用CPU时间。如果线程竞争不激烈,并且保持锁的时间段。适合使用自旋锁。

2、阻塞锁:

阻塞锁改变了线程的运行状态,让线程进入阻塞状态进行等待,当获得相应的信号(唤醒或者时间)时,才可以进入线程的准备就绪状态,转呗就绪状态的所有线程,通过竞争,进入运行状态。

优缺点分析:

阻塞锁的优势在于,阻塞的线程不会占用cpu时间,不会导致 CPu占用率过高,但进入时间以及恢复时间都要比自

旋锁略慢。在竞争激烈的情况下 阻塞锁的性能要明显高于自旋锁。

3、重入锁:

java 中的synchronized同步块是可重入的。这意味着如果一个java线程进入了代码中的synchronized同步块,

并因此获得了该同步块使用的同步对象对应的管程上的锁,那么这个线程可以进入由同一个管程对象所同步的另

一个java代码块。

ReentrantLock与synchronized比较:

  1. 前者使用灵活,但是必须手动开启和释放锁

  2. 前者扩展性好,有时间锁等候(tryLock( )),可中断锁等候(lockInterruptibly( )),锁投票等,适合用于高度竞争锁和多个条件变量的地方

  3. 前者提供了可轮询的锁请求,可以尝试去获取锁(tryLock( )),如果失败,则会释放已经获得的锁。有完善的错误恢复机制,可以避免 死锁 的发生。

优缺点分析:

可重入锁的最大优点就是可以避免死锁。缺点是必须手动开启和释放锁。

偏向锁、轻量锁和重量锁的优缺点总结如下:

文章来源:智云一二三科技

文章标题:java详解自旋锁、阻塞锁、重入锁、偏向锁、轻量锁和重量锁

文章地址:https://www.zhihuclub.com/180682.shtml

关于作者: 智云科技

热门文章

网站地图