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

时间:2016-10-24 01:50:01

标签: java multithreading swing

当我在没有指定任何线程优先级的情况下创建Java Swing应用程序时,事件派发线程的运行优先级高于主线程吗?据我所知,这并不能保证主线程永远不会中断事件派发线程。

2 个答案:

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