ICondition.AwaitNanos(Int64) 方法

定义

使当前线程等待,直到发出信号或中断,或指定的等待时间已过。

[Android.Runtime.Register("awaitNanos", "(J)J", "GetAwaitNanos_JHandler:Java.Util.Concurrent.Locks.IConditionInvoker, Mono.Android, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null")]
public long AwaitNanos (long nanosTimeout);
[<Android.Runtime.Register("awaitNanos", "(J)J", "GetAwaitNanos_JHandler:Java.Util.Concurrent.Locks.IConditionInvoker, Mono.Android, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null")>]
abstract member AwaitNanos : int64 -> int64

参数

nanosTimeout
Int64

等待的最长时间(以纳秒为单位)

返回

该值的 nanosTimeout 估计值减去从此方法返回所花费的时间。 正值可用作后续调用此方法的参数,以完成等待所需时间。 小于或等于零的值表示没有时间保留。

属性

例外

如果当前线程中断(并且支持线程挂起的中断)

注解

使当前线程等待,直到发出信号或中断,或指定的等待时间已过。

与此条件关联的锁是原子释放的,当前线程出于线程计划目的被禁用,并处于休眠状态,直到<发生五件事的 em>一</em>:<ul<>li>其他线程调用#signal此方法Condition,并且当前线程恰好被选为要唤醒的线程;或者 li 其他线程调用#signalAll此方法Condition;或 li>><<其他一些线程 Thread#中断中断当前线程,并且支持线程挂起的中断;或 <li>指定的等待时间已过;或 <li>A ”<出现>虚假唤醒</em>“。 </ul>

在所有情况下,在此方法返回当前线程之前,必须重新获取与此条件关联的锁。 当线程返回时,它<>保证</em> 保留此锁。

如果当前线程:<ul><li>在进入此方法时设置了中断状态;或者 <li>是线程#中断中断,并且支持线程挂起的中断,<则会InterruptedException引发 /ul>,并清除当前线程的中断状态。 在第一种情况下,不会指定中断测试是否在释放锁之前发生。

该方法返回返回时等待的 nanosTimeout 纳秒数的估计值,或者如果超时,该值小于或等于零。此值可用于确定在等待返回但等待条件仍不保留的情况下是否和重新等待的时间。 此方法的典型用法采用以下形式:

{@code
            boolean aMethod(long timeout, TimeUnit unit)
                throws InterruptedException {
              long nanosRemaining = unit.toNanos(timeout);
              lock.lock();
              try {
                while (!conditionBeingWaitedFor()) {
                  if (nanosRemaining <= 0L)
                    return false;
                  nanosRemaining = theCondition.awaitNanos(nanosRemaining);
                }
                // ...
                return true;
              } finally {
                lock.unlock();
              }
            }}

设计说明:此方法需要一个 nanosecond 参数,以避免在报告剩余时间时出现截断错误。 这种精度损失会使程序员难以确保在重新等待发生时,总等待时间不会系统地缩短到指定时间。

<b>实现注意事项</b>

调用此方法时,假定当前线程保留与此关联的 Condition 锁。 由实现决定这是否为案例以及否,如何响应。 通常,将引发异常(例如 IllegalMonitorStateException),并且实现必须记录该事实。

实现可以有利于响应响应信号的中断,或指示指定等待时间的运行时间。如果响应正常方法,则有利于响应中断。 在任一情况下,实现都必须确保信号重定向到另一个等待线程(如果有)。

适用于 . 的 java.util.concurrent.locks.Condition.awaitNanos(long)Java 文档

本页的某些部分是根据 Android 开放源代码项目创建和共享的工作进行的修改,并根据 Creative Commons 2.5 属性许可证中所述的术语使用。

适用于