3

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

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

有没有办法在Java中使用信号量以类似的方式做到这一点?等待像 nr==0 这样的条件。

4

2 回答 2

4

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

private final CountDownLatch xIsZeroLatch = new CountDownLatch(1);

然后按如下方式使用它:

  • 在您的等待线程中:

    xIsZeroLatch.await();
    
  • 在其他线程中:

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

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

于 2013-02-17T21:34:33.567 回答
0
public void setX(int a) {
    x = a;
    if(x==0) {
         //do stuff
    }
}

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

于 2013-02-17T21:37:55.247 回答