当我创建一个JavaSwing应用程序而不指定任何线程优先级级别时,事件调度线程是否以比主线程更高的优先级运行?我理解这并不能保证主线程永远不会中断事件调度线程。
你为什么要做这样的假设?
Swing的规则是,所有更新GUI的代码都应该在EDT上执行,以便Swing组件的所有更新都按顺序完成。
此规则的原因是您无法控制线程何时中断,因此您不希望另一个线程同时更新相同的GUI组件,这会使组件处于不一致状态,从而导致您无法复制的随机问题。
是的。
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
。