gpt4 book ai didi

java - 有没有办法设置两个或多个事件派发线程(EDT)?

转载 作者:搜寻专家 更新时间:2023-10-31 20:19:33 28 4
gpt4 key购买 nike

Java 是否能够一次创建多个 EDT?

我正在尝试设置 EDT 以及它如何更新“重型”面板的内容,其中可能嵌入了十几个面板,总共有数百个组件。目前我有

        public void run() {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
panel.update();
}
});
}

我看过以下帖子:

Measuring "busyness" of the event dispatching thread

How does the event dispatch thread work?

Java Event-Dispatching Thread explanation

http://en.wiki2.org/wiki/Event_dispatching_thread

等等。

我有点理解,如果有十几个事件,单个 EDT 必须处理,Java 已经有一个内部调度机制来对这些事件进行分组/优先级排序。

根据 http://docs.oracle.com/javase/tutorial/uiswing/concurrency/dispatch.html

"This is necessary because most Swing object methods are not "thread safe": invoking them from multiple threads risks thread interference or memory consistency errors."

如果我用下面的 new Thread(new Runnable() { ... }.start() 创建第二个 EDT 会怎么样?

java会不会因为担心线程安全而自动将两个EDT合并回一个?

       new Thread(new Runnable() {
public void run() {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
panel.update();
}
});
}
}).start();

最佳答案

只能有一个事件调度线程!

但是为什么您甚至想要为此拥有多个线程呢?即使对于具有许多组件的“重型”面板(在我目前正在处理的应用程序中必须有 1000 个组件),一个 EDT 就足够了。请记住,您不应在 EDT 上执行任何占用大量 CPU 时间的任务。否则,您将阻止更新事件的 EDT,并且您的 GUI 将在响应用户输入时变得“迟缓”。

还要记住,所有 GUI 组件都应该只在 EDT 中创建和操作,因为许多组件不是线程保存的。忽略此准则可能适用于特定任务,但迟早会出现奇怪的行为和/或崩溃!

关于java - 有没有办法设置两个或多个事件派发线程(EDT)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27822966/

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