사용의 이점이 있습니까?
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 번 경우를 제외하고는 래치를 재사용 할 수 없으며 더 중요한 것은 생성 될 스레드 수를 미리 알아야합니다 (또는 래치를 생성하기 전에 모두 시작될 때까지 기다려야 함).
그렇다면 어떤 상황에서 래치가 더 좋을까요?