Ich verwende die CountDownLatch, um einen Initialisierungsprozess zwischen zwei Threads zu synchronisieren, und ich frage mich über die ordnungsgemäße Handhabung der InterruptedException, die es werfen könnte.CountDownLatch InterruptedException
der Code war ich anfangs dieses schrieb:
private CountDownLatch initWaitHandle = new CountDownLatch(1);
/**
* This method will block until the thread has fully initialized, this should only be called from different threads Ensure that the thread has started before this is called.
*/
public void ensureInitialized()
{
assert this.isAlive() : "The thread should be started before calling this method.";
assert Thread.currentThread() != this, "This should be called from a different thread (potential deadlock)";
while(true)
{
try
{
//we wait until the updater thread initializes the cache
//that way we know
initWaitHandle.await();
break;//if we get here the latch is zero and we are done
}
catch (InterruptedException e)
{
LOG.warn("Thread interrupted", e);
}
}
}
Ist dieses Muster einen Sinn? Grundsätzlich ist es eine gute Idee, die InterruptedException ignorieren nur warten, bis es erfolgreich ist. Ich glaube, ich verstehe einfach nicht die Situationen, in denen dies unterbrochen werden würde, also weiß ich nicht, ob ich anders damit umgehen sollte.
Warum wird hier eine InterruptedException ausgelöst, welche Vorgehensweise ist am besten geeignet?
Gah Ich habe versucht, Ihre Formatierung zu beheben, und es hat einen Bearbeitungskonflikt. Ich habe keine Möglichkeit zurückzurollen. Es tut uns leid! –
Ich rollte es schon zurück. Danke für die Hilfe! Ich hatte es falsch bemerkt, aber beschlossen, es gleichzeitig mit dem Schreiben der Textwand zu reparieren. – jdmichal
Eigentlich nein, ich bin nur wirklich an Wikipedia gewöhnt, wo Sie auf die Änderung, die Sie rückgängig machen möchten, auf Rollback klicken, nicht auf die Revision, die Sie zurücksetzen möchten ** zu **. –