利用するメリットはありますか
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: カウントダウンラッチ
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 の場合はラッチを再利用できず、さらに重要なことに、作成されるスレッドの数を事前に知る必要があります (または、すべてのスレッドが開始されるまで待ってからラッチを作成します)。
では、どのような状況でラッチが望ましいのでしょうか?