gpt4 book ai didi

java - java中倒计时锁存器的用法

转载 作者:行者123 更新时间:2023-11-30 03:25:42 28 4
gpt4 key购买 nike

我是 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");

}
.........
........

正如我从另一篇文章中读到的,

One of the disadvantages/advantages of CountDownLatch is that its not reusable once count reaches to zero you can not use CountDownLatch any more.

我的疑问是在 for 循环内使用相同实例闩锁。如果CountDownLatch不可重用,如果第一次迭代latch.countDown()开始并且到第三次迭代时变为零,会发生什么(第三次迭代时的latch.countDown()无效??)。

问题是:

当我调试 for 循环(使用 eclipse)时,当控制到达 latch.await(); 时,它就会挂起。但是,如果我只是运行该应用程序,则不会发生挂起。

我不太明白倒计时锁存器的用法。请向我解释一下。

最佳答案

这里似乎您没有使用多线程,并且所有工作都在一个线程中完成,因为您不需要使用 CountDownLatch

还有latch.await();挂起,因为它正在等待所有 count的任务将完成(似乎在这里//rows -2 , columns -3 = 6)并调用 latch.countDown(); 。了解更多信息docs .

这是简单的使用示例,其中 t2等待t1 :

import java.util.concurrent.CountDownLatch;

public class Test {

public static void main(String... s){
final CountDownLatch cdl = new CountDownLatch(1);

Thread t1 = new Thread(new Runnable() {

@Override
public void run() {
int i = 5;
while(i-- > 0)
System.out.println("t2 wait me");
cdl.countDown();
}
});


Thread t2 = new Thread(new Runnable() {

@Override
public void run() {
try {
cdl.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("done");
}
});

t2.start();
t1.start();
}

}

关于java - java中倒计时锁存器的用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30301681/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com