【发布时间】:2021-06-15 16:10:55
【问题描述】:
所以如果 Event Dispatch Thread 是一个独立于主线程的线程,那让我认为下一个代码会输出
Before
Runnable
true
After
但是当我运行它时,就好像 EDT 在运行 invokeLater(..) 方法中的代码块之前等待主线程完成。输出是:
Before
After
Runnable
true
代码:
public class Main {
public static void main(String[] args) {
System.out.println("Before");
SwingUtilities.invokeLater(() -> {
System.out.println("Runnable");
System.out.println(SwingUtilities.isEventDispatchThread());
});
System.out.println("After");
}
}
但是,如果我将 invokeLater(..) 替换为 invokeAndWait(..),那么我会得到
Before
Runnable
true
After
这让我觉得 EDT 并不是一个真正的单独线程,或者至少在这个例子中它的行为或者只是在我看来不是。你怎么解释这个?
【问题讨论】:
-
EDT is temporary queue 在 flush() 之后为空时消失。您可以通过调用 SwingAction 反复“激活”此队列。 InvokeLater and invokeAndWait 在 main() 中实现了不同的逻辑,那么你的输出是正确的。注意在 isEventDispatchThread() 返回 TRUE 的情况下不能调用 invokeAndWait
标签: java multithreading swing event-dispatch-thread invokelater