इस प्रतीक्षा घोषणा करने के बाद:सूचित करते समय प्रतीक्षा करें (लंबी टाइमआउट) अधिसूचना या समय समाप्ति के लिए बाहर निकलें?
public final native void wait(long timeout) throws InterruptedException;
यह टाइमआउट द्वारा InterruptedException से बाहर निकलने सकता है, या, या क्योंकि सूचित करें/NotifyAll विधि एक और धागा में बुलाया गया था, अपवाद को पकड़ने के लिए आसान है, लेकिन ...
वहाँयह जानने का कोई तरीका है कि बाहर निकलने का कारण टाइमआउट था या अधिसूचित था?
संपादित करें:
यह एक मुश्किल रास्ता है कि, काम कर सकता था (हालांकि मैं यह पसंद नहीं है)
long tBefore=System.currentTimeMillis();
wait(TIMEOUT);
if ((System.currentTimeMillis() - tBefore) > TIMEOUT)
{
//timeout
}
मुझे एक समान आवश्यकता थी और मेरे मामले में यह पता चला कि 'सेमफोर' बेहतर अनुकूल था; 'Semaphore.tryAququire (लंबी टाइमआउट, टाइम यूनिट यूनिट) 'टाइमआउट समाप्त होने पर' 'झूठा' लौटाता है। – Santosh
सेमफोर तब तक काम करेगा जब तक आपको प्रतीक्षा करने की क्षमता न हो, जो सेमाफोर सार्वजनिक अनुबंध द्वारा समर्थित नहीं है। –