Có tuyên bố chờ đợi này:Làm cách nào để phân biệt thời gian chờ (hết thời gian chờ) để thông báo hoặc hết thời gian chờ?
public final native void wait(long timeout) throws InterruptedException;
Nó có thể thoát bởi InterruptedException, hoặc bằng thời gian chờ, hoặc vì Thông báo/notifyAll phương pháp được gọi là trong chủ đề khác, ngoại lệ là dễ dàng để bắt nhưng ...
Có cách nào để biết nguyên nhân thoát là hết thời gian hoặc thông báo?
EDIT:
Đây là một cách khéo léo có thể làm việc, (mặc dù tôi không thích nó)
long tBefore=System.currentTimeMillis();
wait(TIMEOUT);
if ((System.currentTimeMillis() - tBefore) > TIMEOUT)
{
//timeout
}
Tôi có nhu cầu tương tự và trong trường hợp của mình, hóa ra là một 'Semaphore' phù hợp hơn; 'Semaphore.tryAcquire (thời gian chờ lâu, đơn vị TimeUnit)' trả về 'false' nếu hết thời gian chờ. – Santosh
Semaphore sẽ hoạt động trừ khi bạn cần có khả năng chờ đợi, không được hỗ trợ bởi hợp đồng công khai Semaphore. –