美文网首页
ReentreantLock:重入锁

ReentreantLock:重入锁

作者: aeborah | 来源:发表于2021-06-22 13:34 被阅读0次

ReentreantLock:重入锁

参考:https://www.cnblogs.com/nullzx/p/4968674.html

一)、 ReentrantLock与synchronized的区别:

1).JDK1.5,在高并发的情况下,ReentrantLock的性能比Synchronized的性能好
2).JDK1.6,中Jvm对其进行了优化,两者差别不大。
3).使用ReentrantLock需要在finally中显示的释放锁,否则,程序出现异常就无法 释放锁。
4).使用Synchronized,JVM虚拟机总会在最后自动的释放synchronized锁。

二)、ReentrantLock的特点

分类: 公平锁/非公平锁
1).公平锁:
特点:保证锁等待队列中各线程是公平的,对锁的获取先进先出
2).非公平锁:
特点:申请锁的线程可能插队,后申请锁的线程可能后进先出
性能比较: 非公平锁的性能优于公平锁,优先选择非公平锁。
构造函数:指定锁的类型

public ReentrantLock(boolean fair)

3). 主要方法:
lock():
获取锁,若锁已占用,则等待
tryLock():
尝试获取锁,不等待立即返回,没有获得锁返回false,获得锁返回true
tryLock(long Time, TimeUnit unit): 在
指定时间里尝试获取锁
lockInterruptibly():
获得锁,但优先响应中断
unlock():
释放锁

三)、使用

1.lock():

特点:
1).返回值为void,没有锁则一直等待,直到获取锁。
2).等待期间,线程不响应中断

2.tryLock():

特点:
1).返回值为boolean ,立即返回获取锁的结果,获取成功返回true,失败返回false
2).尝试获取锁期间,不响应中断。

lock()与tryLock的区别():

1: lock拿不到锁会一直等待。tryLock是去尝试,拿不到就返回false,拿到返回true。
2: tryLock是可以被打断的,被中断 的,lock是不可以。

lockInterruptibly():

特点:
1).返回值为void,获取锁,如果获取失败,则一直等待,且优先处理中断
2).获取锁时会先使用Interrupt()判断中断状态并重置中断状态,当中断状态位 true时,抛出InterruptedExecption,否则执行获取锁操作
注意:
lockInterruptibly()在使用时,需要两个try语句,lockInterruptibly()声明在第一个try中,并对应catch处理,业务逻辑在第二个try中,关闭锁也在第二个try的finally中。
原因:如果使用一层的try,当线程的中断状态为true时,会抛出异常,进行catch处理,之后在finally释放锁,由于线程未获得锁,调用lock.unlock()会抛出IllegalMonitorStateExecption。

while(true){
        try{
            lock.lockInterruptibly();
            try{
                    。。。。。
            }finally{
                lock.unlock();
            }
        }catch(InterruptedExecption e){
            。。。。。
        }
}

相关文章

  • ReentreantLock:重入锁

    ReentreantLock:重入锁 参考:https://www.cnblogs.com/nullzx/p/49...

  • java.util.concurrent.locks.Reent

    什么是重入锁 重入锁就是指重复进入锁,它表示该锁能够支持一个线程对资源的重复加锁。 重入锁继承与实现关系 重入锁的...

  • ReentrantLock 源码分析

    锁的基本概念 可重入锁 Reentrant 就是可重入的意思,如果锁具备可重入性,则称作为可重入锁。像synchr...

  • ReentrantLock重入锁

    一、ReentrantLock重入锁 1、ReentrantLock重入锁简介 ReentrantLock可以完全...

  • Java并发编程-重入锁

    章节目录 什么是重入锁 底层实现-如何实现重入 公平与非公平获取锁的区别与底层实现 1.什么是重入锁 1.1 重入...

  • Java高并发实战——同步控制工具

    (1)、重入锁(ReentrantLock) 重入锁使用java.util.concurrent.locks.Re...

  • Java中的各种锁

    一个线程中的多个流程能不能获取同一把锁:可重入锁和非可重入锁 可重入锁 可重入性:表明了锁的分配机制,是基于线程的...

  • java可重入锁

    可重入概念: java的可重入锁: 可重入锁的一种实现方式: 可重入锁的两种使用例子: 例子1: 例子2: 例子1...

  • Java多线程 ReentrantLock CAS

    重入锁死 Reentrance Lockout 重入锁死可能会发生在如果一个线程重入一个锁中,ReadWriteL...

  • 各种锁的概念

    锁的概念 可重入不可重入公平锁非公平锁锁中断通过一个故事理解可重入锁的机制 - 小勇DW3 - 博客园[https...

网友评论

      本文标题:ReentreantLock:重入锁

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