各スレッドの実行中に、前のスレッドが既に countdown.countDown() を呼び出してラッチカウントを 1 減らした後でも、countdown.getCount() が常に「3」を出力するのはなぜですか?
3 つのスレッドすべてを解放できるように、ラッチ カウントが 0 に達したことを Java がどのように認識するかについては、ちょっとうんざりしています。
import java.util.concurrent.CountDownLatch;
class b {
static final CountDownLatch countdown = new CountDownLatch(3);
public static void main(String[] args) {
for (int i = 0; i < 3; ++i) {
Thread t = new Thread() {
public void run() {
System.out.printf("Starting on %d other threads.\n",
countdown.getCount());
countdown.countDown();
System.out.printf("new on %d other threads.\n",
countdown.getCount());
try {
countdown.await(); // waits until everyone reaches this
// point
// System.out.println("Go again : "
// +countdown.getCount());
} catch (Exception e) {
}
}
};
t.start();
}
System.out.println("Go");
}
}