
[英]why can't Countdownlatch in java stops at given latch count?
[英]Why CountDownLatch sometimes doesn't release threads when count gets to zero?
我正在构建一个简单的对话框,可以通过按按钮或Esc
按钮将其关闭。 我在关闭对话框之前使用CountDownLatch等待,并从各种侦听器中调用.countDown()
。
我遇到了以下问题-在窗口上按“ X”调用.countDown()
并导致对话框被.countDown()
,而按按钮则导致调用相同的代码,但线程无法恢复执行。 可能是什么问题呢?
可编译/可运行示例:
import java.util.concurrent.CountDownLatch;
import javax.swing.JFrame;
public class StrangeDialog extends javax.swing.JDialog {
final CountDownLatch latch = new CountDownLatch(1);
public StrangeDialog(JFrame parent) {
super(parent, true); // removing this line fixes things
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosed(java.awt.event.WindowEvent evt) {
System.out.println(latch);
latch.countDown();
}
});
setFocusable(true);
addKeyListener(new java.awt.event.KeyAdapter() {
public void keyReleased(java.awt.event.KeyEvent e) {
System.out.println(latch);
latch.countDown();
}
});
setSize(100,100);
setVisible(true);
}
public static void main(String[] args) {
StrangeDialog dialog = new StrangeDialog(null);
try {
dialog.latch.await();
} catch (InterruptedException ex) {
}
dialog.setVisible(false);
System.out.println("Released");
}
}
您正在创建一个模式对话框。 基本上,代码不会超过StrangeDialog dialog = new StrangeDialog(null);
直到窗口关闭。
尝试:
final StrangeDialog dialog = new StrangeDialog(null);
SwingUtilities.invokeLater(new Runnable() { public void run() { dialog.setVisible(true); } });
在main()中打开窗口,它将按预期工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.