Должно ли приложение Swing GUI управляться из Event Dispatcher или из основного потока?

Я прочитал несколько книг о Java. Во всех них была хотя бы одна глава, посвященная программированию в GUI. Во всех них создание приложения простой формы следовало этой логике:

MyFrame.java

public class MyFrame extends JFrame
{
    JButton button1;

    public MyFrame()
    {
        button1 = new JButton("Click here.");
    }
}

FrameTest.java:

public class FrameTest
{
    public static void main(String[] args)
    {
        MyFrame myFrame = new MyFrame();

        myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        myFrame.setSize(600, 600);
        myFrame.setVisible(true);
    }
}

По сути, просто создайте подкласс JFrame, чтобы создать форму и объявить в качестве переменных экземпляра другие компоненты и инициализировать эти компоненты в конструкторе. А затем создайте другой тестовый класс, создайте экземпляр подкласса frame в этом классе и вызовите некоторые из его методов, чтобы сделать его видимым.

Но на уроках параллелизма я узнал, что у нас есть основной поток, который запускает main () в каждом приложении, которое мы создаем. Насколько я знаю, когда мы используем Swing для создания приложений с графическим интерфейсом, у нас появляется другой поток (Event Dispatcher Thread). Так что, если я не ошибаюсь, в каждом приложении на основе Swing есть как минимум два потока. Это делает каждое приложение с графическим интерфейсом многопоточным. И в некоторых статьях и руководствах, которые я читал, говорится, что Swing не поддерживает многопоточность, поэтому все компоненты GUI должны создаваться и изменяться только в потоке диспетчера событий, в противном случае могут возникнуть ошибки интерференции потоков и ошибки несоответствия памяти.

Даже в простейшем примере в Википедии (http://en.wikipedia.org/wiki/Swing_%28Java%29), это сделано так через метод invokeLater.

Так какой из них является верным подходом? Где я не прав?

Ответы на вопрос(2)

Ваш ответ на вопрос