提问者:小点点

Swing事件调度线程运行的优先级是否高于主线程?


当我创建一个JavaSwing应用程序而不指定任何线程优先级级别时,事件调度线程是否以比主线程更高的优先级运行?我理解这并不能保证主线程永远不会中断事件调度线程。


共2个答案

匿名用户

你为什么要做这样的假设?

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_PRIORITY10==Thread.MAX_PRIORITY