AbstractQueuedSynchronizer::tryAcquireNanos源码笔记

public final boolean tryAcquireNanos(int arg, long nanosTimeout)
     throws InterruptedException {
     // 如果线程已经被中断则抛中断异常
     if (!Thread.interrupted()) {
          // 首次简单尝试获取锁就成功了
          if (tryAcquire(arg))
               return true;
          // 设定的超时时间不合法
          if (nanosTimeout <= 0L)
               return false;
          // 调用私有通用acquire方法,注意最后一个参数传入的是终止时间点,不是时间长度
          int stat = acquire(null, arg, false, true, true,
                              System.nanoTime() + nanosTimeout);
          // stat>0 说明获取锁成功
          if (stat > 0)
               return true;
          // 获取锁失败
          if (stat == 0)
               return false;
     }
     throw new InterruptedException();
}

 

上一篇:这段危险代码90%的人都写过!


下一篇:正则表达式知识点总结