Est-il un avantage à l'utilisation de java.util.de façon concomitante.CountdownLatch au lieu de java.util.de façon concomitante.Sémaphore? Aussi loin que je peux dire fragments sont presque équivalents:
1:
final Semaphore sem = new Semaphore(0);
for (int i = 0; i < num_threads; ++ i)
{
Thread t = new Thread() {
public void run()
{
try
{
doStuff();
}
finally
{
sem.release();
}
}
};
t.start();
}
sem.acquire(num_threads);
2:
final CountDownLatch latch = new CountDownLatch(num_threads);
for (int i = 0; i < num_threads; ++ i)
{
Thread t = new Thread() {
public void run()
{
try
{
doStuff();
}
finally
{
latch.countDown();
}
}
};
t.start();
}
latch.await();
Sauf que dans le cas n ° 2 le verrou ne peut pas être réutilisé et plus important encore, vous avez besoin de savoir à l'avance combien de threads sera créé (ou attendre jusqu'à ce qu'ils sont tout a commencé avant la création de l'loquet.)
Donc, en quoi la situation pourrait le loquet être préférable?