是否有必要从应用程序的main方法切换到Swing线程?

时间:2012-06-12 22:46:13

标签: java swing thread-safety

在我的main(String[] args)方法中,我没有调用SwingUtilities.invokeAndWait来在Swing线程上运行main1方法。我一直认为我需要这个用于线程安全。我被告知没有必要,因为执行任何GUI代码的第一个线程变成 GUI线程。换句话说,你只能从一个线程使用Swing,但是哪一个并不重要。但是我找不到这方面的来源,我想确定一下。

1 个答案:

答案 0 :(得分:7)

你被告知的是假的。 main方法最初将由主线程调用。所有与GUI相关的活动必须在名为事件调度线程的完全独立的线程上执行。主线程成为EDT。

一个很好的例子,看看我在说什么:

public class ThreadTest {
    public static void main(String[] args) {
        final Thread main = Thread.currentThread();
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                Thread edt = Thread.currentThread();

                System.out.println(main);
                System.out.println(edt);
                System.out.println(main.equals(edt));
            }
        });
    }
}