Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中wait(x==0)的等价物_Java_Concurrency_Pthreads_Semaphore - Fatal编程技术网

Java中wait(x==0)的等价物

Java中wait(x==0)的等价物,java,concurrency,pthreads,semaphore,Java,Concurrency,Pthreads,Semaphore,例如,在Pthreads中,进程可能会等待特定条件,例如: <await (nr == 0 ^ nw == 0) nw++>; ; 有没有类似的方法在Java中使用信号量来实现这一点?等待nr==0这样的条件,也就是说。如果是一次性事件,您可以使用: 然后按如下方式使用它: 在等待线程中: xIsZeroLatch.await(); 在其他线程中: 如果条件可以在true和false之间更改多次,并且每次更改都需要一个事件,则可以在一个许可证下使用信号灯 public

例如,在Pthreads中,进程可能会等待特定条件,例如:

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

有没有类似的方法在Java中使用信号量来实现这一点?等待nr==0这样的条件,也就是说。

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

然后按如下方式使用它:

  • 在等待线程中:

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

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

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

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

我部分修复了代码片段的格式,因此它至少是可见的;如果有必要,请进行编辑以使其正确。查看条件界面:我认为一个条件会起作用,但我不是必须不时地从另一个线程手动检查,然后通过该条件发出信号吗?如果涉及多个线程,您可能应该引入某种形式的同步。
x = newX();
if (x == 0) xIsZeroLatch.countDown();
public void setX(int a) {
    x = a;
    if(x==0) {
         //do stuff
    }
}