在Java中实现阻塞函数调用

mik*_*era 9 java concurrency blocking

在Java中实现阻塞函数调用的推荐/最佳方法是什么,以后可以通过另一个线程的调用解除阻塞?

基本上我想在一个对象上有两个方法,第一个调用阻塞任何调用线程,直到第二个方法由另一个线程运行:

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() {
     // ...
  }

} 
Run Code Online (Sandbox Code Playgroud)

意图BTW不仅仅是为了获得阻塞行为,而是编写一种方法,在可以计算所需结果的某个未来点之前阻塞.

Sim*_*son 15

您可以使用CountDownLatch.

latch = new CountDownLatch(1);
Run Code Online (Sandbox Code Playgroud)

要阻止,请致电:

latch.await();
Run Code Online (Sandbox Code Playgroud)

要取消阻止,请致电:

latch.countDown();
Run Code Online (Sandbox Code Playgroud)