Java: ждать, пока другой поток не выполнит оператор n раз - PullRequest
2 голосов
/ 05 сентября 2010

Каков наилучший способ остановить поток и дождаться, пока оператор (или метод) будет выполнен определенное количество раз другим потоком?Я думал о чем-то вроде этого (пусть «число» будет int):

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

...

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

Очевидно, что это не сработает, прежде всего потому, что кажется, что вы не можете ждать () для типа int,Кроме того, все другие решения, которые приходят мне в голову, являются действительно сложными для такой простой задачи.Какие-либо предложения?(Спасибо!)

Ответы [ 2 ]

6 голосов
/ 05 сентября 2010

Звучит так, будто вы ищете 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

A Semaphore также будет работать:

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
2 голосов
/ 05 сентября 2010

Может оказаться полезным что-то вроде CountDownLatch .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...