JUC:ReentrantLock

ReentrantLock:

  • 互斥:保证共享资源的原子性;

  • 同步:使用条件变量来达到线程通信【wait-notify】;

  • 相对于synchronized锁它具备以下特点:

    • 可中断;

    • 可设置超时时间

    • 可以设置公平锁

    • 支持多个条件变量:

      reentrantLock.lock();
      try{
          //临界区
      }finally{
          reentrantLock.unlock();
      }
      
    • 可重入【均可】:

    • 可中断【不用一直等待WaitSet】

      • wait方法是不可打断的阻塞等待;
      • 被动防止死锁;
      • reentrantLock.lockInterruptibly()方法可以配合interrupt()使用,通过捕获异常的方式被中断;
    • 锁超时:

      • 主动防止死锁;
      • tryLock()方法可中断,可传入等待时间;
    • 公平锁:

      • 不公平:所有的人一起抢锁;
      • 公平锁:按照先入先得,构造方法设置true;
    • 条件变量:

      • synchronized中进入WaitSet阻塞等待;

      • 而ReentrantLock有很多这种小房间;

        Condition condition1 = lock.newCondition();
        Condition condition2 = lock.newCondition();
        lock.lock();
        condition1.wait();
        
        condition1.signal();
        condition1.signalAll();
        
posted @ 2025-03-24 11:58  烟雨断桥  阅读(9)  评论(0)    收藏  举报