等效于Java中的等待(x == 0)

时间:2013-02-17 21:29:25

标签: java concurrency pthreads semaphore

在例如Pthreads中,有可能让某个进程等待某个条件,例如:

<await (nr == 0 ^ nw == 0) nw++>;

有没有办法在Java中使用Semaphores以类似的方式执行此操作?正在等待nr == 0这样的条件。

2 个答案:

答案 0 :(得分:4)

如果是一次性事件,您可以使用a CountDownLatch

private final CountDownLatch xIsZeroLatch = new CountDownLatch(1);

然后按如下方式使用它:

    在你的等待线程中
  • xIsZeroLatch.await();
    
  • 在其他帖子中:

    x = newX();
    if (x == 0) xIsZeroLatch.countDown();
    

如果条件可以在true和false之间多次更改,并且每次更改都需要一个事件,则可以使用Semaphore一个许可。

答案 1 :(得分:0)

public void setX(int a) {
    x = a;
    if(x==0) {
         //do stuff
    }
}

然后使用该setter而不是x = a