이 대기 선언 갖는알림 또는 시간 초과를 위해 대기 (긴 시간 제한) 종료시 구별하는 방법은 무엇입니까?
public final native void wait(long timeout) throws InterruptedException;
그것은 예외 : InterruptedException에 의해 종료하거나 시간 제한에 의해, 또는 때문에 /가는 notifyAll 메소드가 다른 스레드에서 호출 된 통지 수, 예외 잡기가 용이하지만 ...이
종료 원인이 시간 종료인지 알리는 방법은 무엇입니까?
편집 :
이것은 당신이 몇 가지 추가를 제공하지 않는 한 당신은 두 개의 구별 할 수 없다 (나는 그것을 좋아하지 않아 있지만), 일할 수있는 까다로운 방법
long tBefore=System.currentTimeMillis();
wait(TIMEOUT);
if ((System.currentTimeMillis() - tBefore) > TIMEOUT)
{
//timeout
}
나는 비슷한 필요성을 가지고 있었고 나의 경우에는 '세마포어'가 더 적합하다고 판명되었다. 'Semaphore.tryAcquire (long timeout, TimeUnit unit)'는 타임 아웃이 경과하면'false'를 반환합니다. – Santosh
세마포어 공개 계약에 의해 지원되지 않는 대기 기능이 필요할 때까지 세마포어가 작동합니다. –