Java Swing事件调度线程的运行优先级是否高于主线程?
当我在不指定任何线程优先级的情况下创建Java Swing应用程序时,事件分派线程是否以比主线程更高的优先级运行?我知道这并不能保证主线程永远不会中断事件调度线程。为什么要做出这样的假设 Swing的规则是,所有更新GUI的代码都应该在EDT上执行,以便所有对Swing组件的更新都按顺序完成 此规则的原因是您无法控制线程何时中断,因此您不希望另一个线程同时更新同一GUI组件,这将使该组件处于不一致的状态,这将导致无法复制的随机问题。是。 EDT的运行优先级高于主线程,如下所示:Java Swing事件调度线程的运行优先级是否高于主线程?,java,multithreading,swing,Java,Multithreading,Swing,当我在不指定任何线程优先级的情况下创建Java Swing应用程序时,事件分派线程是否以比主线程更高的优先级运行?我知道这并不能保证主线程永远不会中断事件调度线程。为什么要做出这样的假设 Swing的规则是,所有更新GUI的代码都应该在EDT上执行,以便所有对Swing组件的更新都按顺序完成 此规则的原因是您无法控制线程何时中断,因此您不希望另一个线程同时更新同一GUI组件,这将使该组件处于不一致的状态,这将导致无法复制的随机问题。是。 EDT的运行优先级高于主线程,如下所示: import j
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\u PRIORITY
和10==Thread.MAX\u PRIORITY
此规则的原因是为了在很大程度上避免在Swing中使用同步方法。谢谢,但尽管您已经证明了这对于一个实现是正确的,我在javadoc中找不到任何东西可以保证所有的实现都是如此。@espertus:你可能不会t@HovercraftFullOfEels那么我猜答案是“可能”,而不是“是”。