我是 Java 编程新手,第一次在 Java 中使用 countDown,
我的代码片段是,
CountDownLatch latch=new CountDownLatch(rows*columns); //rows -2 , columns -3
for (int i = 0; i < rows; i++) {
for (int j = 0; j < columns; j++) {
GUIView view = getView(1, 1);
if(view == null) {
if(ViewColumn(j +1) != null){
latch.countDown(); //EDT
continue;
}
latch.countDown(); //EDT
break;
}
new Thread(new countDownThread(view,latch)).start(); //Where i do some other processing and do countDown
}
}
try {
logger.log("Before countdown await");
latch.await();
logger.log("After countdown await");
}
.........
........
正如我从另一篇文章中读到的,
CountDownLatch 的缺点/优点之一是,一旦计数达到零,它就不可重复使用,您不能再使用 CountDownLatch。
我的疑问是在 for 循环内使用相同的实例 latch 。如果 CountDownLatch 不可重用,如果第一次迭代 latch.countDown() 开始并且在第三次迭代时变为零会发生什么(第三次迭代的 latch.countDown() 无效??)。
问题是 :
当我调试for循环(使用eclipse)时,当控制到达时latch.await();
它就会挂起。但是,如果我只是运行应用程序,则不会发生挂起。
我不太了解 countDown 锁存器的用法。请向我解释一下。