2

スレッドを停止し、ステートメント(またはメソッド)が別のスレッドによって特定の回数実行されるのを待つための最良の方法は何ですか?私はこのようなことを考えていました(「数値」をintとします):

number = 5;
while (number > 0) {
   synchronized(number) { number.wait(); }
}

...

synchronized(number) {
   number--;
   number.notify();
}

明らかに、これは機能しません。まず、int型でwait()を実行できないように見えるためです。さらに、私のJavaにナイーブな頭に浮かぶ他のすべてのソリューションは、このような単純なタスクでは非常に複雑です。助言がありますか?(ありがとう!)

4

2 に答える 2

6

あなたが探しているように聞こえますCountDownLatch

CountDownLatch latch = new CountDownLatch(5);
...
latch.await(); // Possibly put timeout


// Other thread... in a loop
latch.countDown(); // When this has executed 5 times, first thread will unblock

ASemaphoreも機能します:

Semaphore semaphore = new Semaphore(0);
...
semaphore.acquire(5);

// Other thread... in a loop
semaphore.release(); // When this has executed 5 times, first thread will unblock
于 2010-09-05T19:30:46.220 に答える
2

CountDownLatchのようなものが役立つかもしれません。

于 2010-09-05T19:31:09.043 に答える