다음을 통해 공유


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 반환될 때까지 대기하는 데 소요된 시간을 뺀 값의 추정값입니다. 양수 값은 원하는 시간 대기를 완료하기 위해 이 메서드에 대한 후속 호출에 대한 인수로 사용될 수 있습니다. 0보다 작거나 같은 값은 시간이 남아 있지 않음을 나타냅니다.

특성

예외

현재 스레드가 중단되고 스레드 일시 중단이 지원되는 경우

설명

현재 스레드가 신호를 보내거나 중단되거나 지정된 대기 시간이 경과할 때까지 대기합니다.

이 조건과 연결된 잠금은 원자성으로 해제되고 현재 스레드는 스레드 예약을 위해 비활성화되고 5가지 중 1/em이 발생할 때까지 <<>휴면 상태가 됩니다. <ul<>li>일부 다른 스레드는 이에 Condition 대한 메서드를 호출 #signal 하고 현재 스레드는 각성될 스레드로 선택됩니다. 또는 <li>다른 스레드는 이에 Condition대한 메서드를 호출 #signalAll 합니다<>.>다른 스레드 스레드#인터럽트는 현재 스레드를 중단하며 스레드 일시 중단이 지원됩니다. 또는 <li>지정된 대기 시간이 경과합니다. 또는 <li>A "<em>가짜 절전 모드 해제</em>" 발생 합니다. </ul>

모든 경우에 이 메서드가 현재 스레드를 반환하기 전에 이 조건과 연결된 잠금을 다시 획득해야 합니다. 스레드가 반환될 때 이 잠금을 <>유지하는 것이 보장됩니다<>.

현재 스레드: ul>li가 이 메서드에 대한 항목에서 중단된 상태를 설정했거나<>, 대기 중 스레드#인터럽트 중단이 지원되고 스레드 <일시 중단이 지원되는 경우 /ul>InterruptedException 이 throw되고 현재 스레드의 중단 상태가 지워집니다.><< 첫 번째 경우 잠금이 해제되기 전에 중단 테스트가 발생하는지 여부는 지정되지 않습니다.

이 메서드는 반환 시 제공된 nanosTimeout 값을 고려하여 대기할 남은 나노초 수의 추정값을 반환하거나, 시간이 초과된 경우 0보다 작거나 같은 값을 반환합니다. 이 값을 사용하여 대기가 반환되지만 대기한 조건이 아직 유지되지 않는 경우 다시 대기할지 여부와 시간을 결정할 수 있습니다. 이 메서드의 일반적인 용도는 다음과 같습니다.

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

디자인 참고: 이 메서드는 남은 시간을 보고할 때 잘림 오류를 방지하기 위해 나노초 인수가 필요합니다. 이러한 정밀도 손실로 인해 프로그래머가 다시 대기할 때 총 대기 시간이 지정된 시간보다 체계적으로 짧지 않도록 하기가 어려워집니다.

<b>구현 고려 사항</b>

현재 스레드는 이 메서드가 호출될 때 이와 Condition 연결된 잠금을 보유하는 것으로 간주됩니다. 이 경우인지 여부와 그렇지 않은 경우 응답 방법을 결정하는 것은 구현에 달려 있습니다. 일반적으로 예외가 throw되고(예: IllegalMonitorStateException) 구현에서 해당 사실을 문서화해야 합니다.

구현은 신호에 대한 응답으로 정상적인 메서드 반환보다 인터럽트 응답 또는 지정된 대기 시간의 경과를 나타내는 오버에 응답하는 것을 선호할 수 있습니다. 두 경우 모두 구현은 신호가 대기 중인 다른 스레드(있는 경우)로 리디렉션되도록 해야 합니다.

에 대한 java.util.concurrent.locks.Condition.awaitNanos(long)Java 설명서

이 페이지의 일부는 Android 오픈 소스 프로젝트에서 만들고 공유하고 Creative Commons 2.5 특성 라이선스에 설명된 용어에 따라 사용되는 작업을 기반으로 하는 수정 사항입니다.

적용 대상