我有一个带有 gui 的简单 JAVA 程序,它只增加 int 变量并在 JLabel 中显示它的值。我通过在其中调用带有 Runnable 类的 EventQueue.invokeLater() 来创建新线程以正确(线程安全)更新 JLabel,而 run 方法只是这样做
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
label.setText("" + number);
}
});
当我运行程序时,正如预期的那样,标签的数量开始从 1 快速增长到大约 5000,但随后开始放缓,我开始看到此类标签的更新,如 100255、173735、235678,并且它们之间的大停顿与阻塞的 GUI。但是,当我在不使用 EventQueue.invokeLater() 的情况下进行编译时,直接调用label.setText("" + number);
一切正常且完美,我可以看到我的标签的每个数字如何变化得非常快。但是我当然意识到在这种情况下我的方法不是线程安全的。
有什么问题?在我看来,EventQueue 工作缓慢或什么的。