当我在没有指定任何线程优先级的情况下创建Java Swing应用程序时,事件派发线程的运行优先级高于主线程吗?据我所知,这并不能保证主线程永远不会中断事件派发线程。
答案 0 :(得分:3)
你为什么要做这个假设?
Swing规则是所有更新GUI的代码都应该在EDT上执行,以便按顺序完成对Swing组件的所有更新。
此规则的原因是您无法控制线程何时被中断,因此您不希望另一个线程同时更新同一GUI组件,这会使组件处于不一致状态状态,这将导致您无法复制的随机问题。
答案 1 :(得分:3)
是强>
EDT的运行优先级高于主线程,如下所示:
import java.awt.EventQueue;
public class Test {
public static void main(String[] args) {
System.out.println(Thread.currentThread().getPriority());
EventQueue.invokeLater(() -> {
System.out.println(Thread.currentThread().getPriority());
});
}
}
输出:
5
6
请注意5 == Thread.NORM_PRIORITY
和10 == Thread.MAX_PRIORITY
。