• ReentrantLock.lockInterruptibly允许在等待时由其它线程调用等待线程的Thread.interrupt方法来中断等待线程的等待而直接返回,这时不用获取锁,而会抛出一个InterruptedException。
  • ReentrantLock.lock方法不允许Thread.interrupt中断,即使检测到Thread.isInterrupted,一样会继续尝试获取锁,失败则继续休眠。只是在最后获取锁成功后再把当前线程置为interrupted状态。

具体实现如下:

1.lock

Lock在第一次获取锁失败后会走:

    public final void acquire(int arg) {
        if (!tryAcquire(arg) &&
            acquireQueued(addWaiter(Node.EXCLUSIVE), arg))
            //中断当前线程
            selfInterrupt();
    }
View Code

相关文章:

  • 2022-01-16
  • 2021-11-09
  • 2022-01-09
  • 2022-01-11
  • 2022-12-23
  • 2021-07-13
猜你喜欢
  • 2022-12-23
  • 2021-11-25
  • 2021-08-15
  • 2021-12-03
  • 2021-08-19
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案