Kann ein Thread-Aufruf auf zwei Sperren gleichzeitig in Java (6) warten ()

Ich habe gerade mit Threads in Java rumgespielt, um sie in den Griff zu bekommen (das scheint der beste Weg zu sein) und jetzt verstehe, was mit Synchronisieren, Warten () und Benachrichtigen () vor sich geht.

Ich bin gespannt, ob es eine Möglichkeit gibt, auf zwei Ressourcen gleichzeitig zu warten (). Ich denke, das Folgende wird nicht ganz das tun, woran ich denke bearbeite: Bitte beachten Sie, dass die üblichen while-Schleifen in diesem Beispiel weggelassen wurden, um nur zwei Ressourcen freizugeben.):

synchronized(token1) {
    synchronized(token2) {
        token1.wait();
        token2.wait(); //won't run until token1 is returned
        System.out.println("I got both tokens back");
    }
}

In diesem (sehr konstruierten) Fall wird Token2 gehalten, bis Token1 zurückgegeben wird, dann wird Token1 gehalten, bis Token2 zurückgegeben wird. Das Ziel ist, sowohl Token1 als auch Token2 freizugeben und dann fortzufahren, wenn beide verfügbar sind (beachten Sie, dass das Verschieben von Token1.wait () außerhalb der inneren synchronisierten Schleife nicht das ist, worauf ich hinaus will).

Eine Schleifenprüfung, ob beide verfügbar sind, ist möglicherweise besser geeignet, um dieses Verhalten zu erreichen (würde dies der Idee einer doppelten Überprüfung der Sperrung nahe kommen?), Würde jedoch zusätzliche Ressourcen verbrauchen - da dies keine endgültige Lösung darstellt, bin ich nicht auf der Suche nach einer Lösung nur um meine neugier zu befriedigen.

Bearbeite Nehmen wir zum besseren Verständnis an, dass die beiden Token hier zwei unterschiedliche Ressourcen darstellen, die der Thread zur gleichen Zeit verwenden muss, und dass einige andere Threads beide zur gleichen Zeit benötigen.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage