使用する利点はありますか
java.util.concurrent.CountdownLatch
の代わりに
java.util.concurrent.Semaphore?
私の知る限り、次のフラグメントはほぼ同等です。
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:CountDownLatch
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();
#2の場合を除いて、ラッチは再利用できません。さらに重要なことには、作成されるスレッドの数を事前に知る必要があります(または、すべてのスレッドが開始されるまで待ってからラッチを作成します)。
それでは、どのような状況でラッチが望ましいのでしょうか?