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(); }