例如,在 Pthreads 中,有可能让进程等待某个条件,例如:
<await (nr == 0 ^ nw == 0) nw++>;
有没有办法在Java中使用信号量以类似的方式做到这一点?等待像 nr==0 这样的条件。
例如,在 Pthreads 中,有可能让进程等待某个条件,例如:
<await (nr == 0 ^ nw == 0) nw++>;
有没有办法在Java中使用信号量以类似的方式做到这一点?等待像 nr==0 这样的条件。
如果它是一次性事件,您可以使用CountDownLatch
:
private final CountDownLatch xIsZeroLatch = new CountDownLatch(1);
然后按如下方式使用它:
在您的等待线程中:
xIsZeroLatch.await();
在其他线程中:
x = newX();
if (x == 0) xIsZeroLatch.countDown();
如果条件可以在 true 和 false 之间多次更改,并且每次更改都需要一个事件,则可以使用 a Semaphore
with one permit。
public void setX(int a) {
x = a;
if(x==0) {
//do stuff
}
}
然后使用该 setter 而不是x = a
.