您现在的位置: 海拉尔区泓运锁具监控设备销售部  >  行业动态  >  海拉尔开锁详解自旋锁、阻塞锁、重入锁

行业动态

海拉尔开锁详解自旋锁、阻塞锁、重入锁

2023-07-08

 1、自旋锁:

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

举例如下:

优缺点分析:

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

2、阻塞锁:


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

优缺点分析:

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

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

3、重入锁:

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

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

一个java代码块。

ReentrantLock与synchronized比较:

前者使用灵活,但是必须手动开启和释放锁
前者扩展性好,有时间锁等候(tryLock( )),可中断锁等候(lockInterruptibly( )),锁投票等,适合用于高度竞争锁和多个条件变量的地方
前者提供了可轮询的锁请求,可以尝试去获取锁(tryLock( )),如果失败,则会释放已经获得的锁。有完善的错误恢复机制,可以避免死锁的发生。
优缺点分析:

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

推荐信息

热门产品