2010-09-05 2 views
2

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

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

... 

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

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

ответ

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 

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 
+0

Семафор, кажется, просто надел здесь, спасибо! – etuardu

Смежные вопросы