Was ist der empfohlene / beste Weg, um einen blockierenden Funktionsaufruf in Java zu implementieren, der später durch einen Anruf von einem anderen Thread entsperrt werden kann?
Grundsätzlich möchte ich zwei Methoden für ein Objekt haben, wobei der erste Aufruf jeden aufrufenden Thread blockiert, bis die zweite Methode von einem anderen Thread ausgeführt wird:
%Vor%Die Absicht BTW besteht nicht nur darin, blockierendes Verhalten zu erhalten, sondern eine Methode zu schreiben, die bis zu einem zukünftigen Punkt blockiert, an dem es möglich ist, das gewünschte Ergebnis zu berechnen.
Sie können CountDownLatch verwenden .
%Vor%Um zu blockieren, rufen Sie:
%Vor%Zum Entsperren rufen Sie:
%Vor% Wenn Sie auf ein bestimmtes Objekt warten, können Sie myObject.wait()
mit einem Thread aufrufen und dann mit myObject.notify()
oder myObject.notifyAll()
aufwecken. Möglicherweise müssen Sie sich in einem synchronized
-Block befinden:
Es gibt ein paar verschiedene Ansätze und Primitive, aber die am besten geeigneten klingt wie ein CyclicBarrier oder CountDownLatch .
Tags und Links java concurrency blocking