ICondition.AwaitNanos(Int64) 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
현재 스레드가 신호를 보내거나 중단되거나 지정된 대기 시간이 경과할 때까지 대기합니다.
[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 특성 라이선스에 설명된 용어에 따라 사용되는 작업을 기반으로 하는 수정 사항입니다.