Metodo Await di classe Condizione non buttare InterruptedException
Domanda
Ho strano problema con un metodo Await di classe Condizione in Java SE 6. Il problema è che il metodo await NON genera sempre un'eccezione durante l'interruzione da un altro thread.
Nella documentazione è scritto che l'IE viene generata quando:
... Qualche altro thread interrompe il thread corrente, e l'interruzione della sospensione filo è supportato ...
Come interpretare questo subsentense: "e l'interruzione della sospensione filo è supportato"
E 'cuciture di essere imposible di non un'eccezione. Hai mai avuto problemi simili?
Soluzione
La sua non è impossibile non buttare InterruptedException
cosa succede se l'oggetto ha ricevuto il segnale tramite signal
o signalAll
API, le specifiche dice questi due metodi si sveglieranno eventuali fili che sono in attesa su questa condizione.
Altri suggerimenti
Ho avuto un problema simile, c'era un thread in attesa su una condizione:
Lock someLock = new ReentrantLock();
Condition someCondition = someLock.newCondition();
...
someCondition.await(timeout, TimeUnit.MILLISECONDS);
e l'invio theThread.interrupt () non ha funzionato. Si è scoperto che per errore un altro filo in mano un someLock bloccata, così await()
stato bloccato. Dopo ho aggiunto someLock.unlock()
nel posto adeguato await () ha iniziato lanciando InterruptedException come previsto.