Implementieren Sie einen blockierenden Funktionsaufruf in Java

9

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.

    
mikera 12.10.2011, 04:39
quelle

3 Antworten

11

Sie können CountDownLatch verwenden .

%Vor%

Um zu blockieren, rufen Sie:

%Vor%

Zum Entsperren rufen Sie:

%Vor%     
Simon Nickerson 12.10.2011, 04:45
quelle
3

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:

%Vor%     
Brendan Long 12.10.2011 04:44
quelle
2

Es gibt ein paar verschiedene Ansätze und Primitive, aber die am besten geeigneten klingt wie ein CyclicBarrier oder CountDownLatch .

    
Brian Kelly 12.10.2011 04:45
quelle

Tags und Links