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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top