Implementieren Sie einen blockierenden Funktionsaufruf in Java
Was ist die empfohlene /beste Weg, um zu implementieren ein blockierender Funktionsaufruf in Java, das kann später aufgehoben durch einen Aufruf aus einem anderen thread?
Grundsätzlich möchte ich zwei Methoden auf ein Objekt, wo der erste Anruf blockiert aufrufenden thread, bis die zweite Methode wird von einem anderen thread:
public class Blocker {
/* Any thread that calls this function will get blocked */
public static SomeResultObject blockingCall() {
//...
}
/* when this function is called all blocked threads will continue */
public void unblockAll() {
//...
}
}
Die Absicht ist ÜBRIGENDS nicht nur um blockieren von Verhalten, sondern schreiben eine Methode, die Blöcke, bis irgendwann, wenn es möglich ist, zu berechnen, das gewünschte Ergebnis.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie eine CountDownLatch.
Blockieren, rufen Sie:
Wieder zu entsperren, rufen Sie:
Wenn Sie warten auf ein bestimmtes Objekt, rufen Sie
myObject.wait()
mit einem thread, und dann Sie aufwachen mitmyObject.notify()
odermyObject.notifyAll()
. Es kann notwendig sein, innerhalb einersynchronized
block:Gibt es ein paar unterschiedliche Ansätze und Grundformen zur Verfügung, aber die entsprechenden sounds, die wie ein CyclicBarrier oder eine CountDownLatch.