3

たとえば Pthreads では、プロセスが特定の条件を待機する可能性があります。たとえば、次のようになります。

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

Javaでセマフォを使用して同様の方法でこれを行う方法はありますか? nr==0 のような条件を待っています。

4

2 に答える 2

4

1 回限りのイベントの場合は、次を使用できますCountDownLatch

private final CountDownLatch xIsZeroLatch = new CountDownLatch(1);

次に、次のように使用します。

  • 待機中のスレッドで:

    xIsZeroLatch.await();
    
  • 他のスレッドで:

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

条件が true と false の間で数回変化する可能性があり、それぞれの変化にイベントが必要な場合は、Semaphore1 つの許可で を使用できます。

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

次に、代わりにそのセッターを使用しx = aます。

于 2013-02-17T21:37:55.247 に答える