运行每个线程时为什么即使在前一个线程已经调用countdown.countDown()并将Latch Count减少1之后,为什么countdown.getCount()始终会打印'3'?Java - COUNTDOWNLATCH中的计数
我有点厌倦了Java如何知道Latch Count已经达到0,以便它可以释放所有3个线程。
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");
}
}
上一个线程已经调用countdown.countDown()之后,逻辑错误出现在*中*:它可能没有 – assylias
http://ideone.com/EloGi9 - 在那里工作正常。如果你幸运,它的行为就像你期望的那样。这就是未定义的多线程行为的美妙之处 – zapl