Mettre en œuvre une fonction de blocage d'appel en Java

Ce qui est recommandé de /la meilleure façon de mettre en œuvre une fonction de blocage d'appel en Java, qui peut ensuite être débloqué par un appel à partir d'un autre thread?

Fondamentalement, je veux avoir deux méthodes sur un objet, où le premier appel bloque tout thread appelant jusqu'à ce que la deuxième méthode est exécutée par un autre 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() {
     //...
  }

} 

L'intention de la TVA n'est pas juste pour obtenir le blocage de comportement, mais pour écrire une méthode qui bloque jusqu'à ce que le futur quand il est possible de calculer le résultat requis.

OriginalL'auteur mikera | 2011-10-12