2010-09-05 22 views
2

Quelle est la meilleure façon d'arrêter un thread et d'attendre qu'une instruction (ou une méthode) soit exécutée un certain nombre de fois par un autre thread? Je pensais à quelque chose comme ça (sans « numéro » être un int):java: attend jusqu'à ce qu'un autre thread exécute une instruction n fois

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

... 

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

Il est évident que cela ne fonctionnerait pas, d'abord parce qu'il semble que vous ne pouvez pas attendre() sur un type int. En outre, toutes les autres solutions qui viennent à mon esprit java-naïf sont vraiment compliquées pour une tâche aussi simple. Aucune suggestion? (Merci!)

Répondre

6

On dirait que vous recherchez 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 travaillerions aussi:

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

Un sémaphore semble juste mignon ici, merci! – etuardu

2

Vous trouverez peut-être quelque chose comme un CountDownLatch utile.