Java中等价于await(x==0)的语句是什么?

3

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

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

有没有使用Java中的信号量类似的方法来实现这个功能?等待条件,如nr==0。

我部分修复了您的代码片段的格式,以便至少可见;如果需要,请编辑以使其正确。 - Paul Bellora
2
请查看 Condition 接口: http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/locks/Condition.html - Cyrille Ka
我认为条件语句会起作用,但是我不需要手动检查另一个线程的情况并通过条件语句发出信号吗? - Rickard
2个回答

4

如果这是一个一次性的事件,你可以使用CountDownLatch

private final CountDownLatch xIsZeroLatch = new CountDownLatch(1);

您可以按照以下方式使用它:
  • in your waiting thread:

    xIsZeroLatch.await();
    
  • in the other thread(s):

    x = newX();
    if (x == 0) xIsZeroLatch.countDown();
    
如果条件在真和假之间多次变化,并且每个变化都需要一个事件,则可以使用一个许可的Semaphore

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

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


1
如果涉及到多个线程,你可能需要引入某种形式的同步。 - assylias

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接