목록 listing 5.11에서이 Thread t
중 하나가 중단되면이 코드는 영원히 기다릴 것입니다 그래서 endGate 래치 (startGate.await()
이 InterruptedException
를 던질 수 있기 때문에하는) 공개되지 않습니다?자바 동시성 - JCiP 책에서 5.11
public class TestHarness {
public long timeTasks(int nThreads, final Runnable task)
throws InterruptedException {
final CountDownLatch startGate = new CountDownLatch(1);
final CountDownLatch endGate = new CountDownLatch(nThreads);
for (int i = 0; i < nThreads; i++) {
Thread t = new Thread() {
public void run() {
try {
startGate.await();
try {
task.run();
} finally {
endGate.countDown();
}
} catch (InterruptedException ignored) { }
}
};
t.start();
}
long start = System.nanoTime();
startGate.countDown();
endGate.await();
long end = System.nanoTime();
return end-start;
}}
왜 먼저 _try_하지? – mre
sthupahsmaht, 그가 그것을 시도하는지에 관계없이. 그것을 고려하여 그것의 유효한 질문은 넓게 사용되고 높이 인용 된 책에서 간행되고있다. –
네, 시도하고 기다립니다. 아직도 누군가가 내가 틀렸다는 것을 설명하기를 희망하면서이 버그가 책에 있다면 믿을 수 없다. – robinmag