¿Debería controlarse la aplicación Swing GUI desde Event Dispatcher o hilo principal?

He leído algunos libros sobre Java. En todos ellos había al menos un capítulo que enseñaba programación de GUI. En todos ellos, la creación de una aplicación de formulario simple estaba siguiendo esta lógica:

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);
    }
}

Básicamente, solo subclase JFrame para crear un formulario y declarar como variables de instancia los otros componentes e inicializar esos componentes en el constructor. Y luego cree otra clase de prueba, cree una instancia de la subclase de marco en esa clase y llame a algunos de sus métodos para hacerla visible.

Pero en las lecciones de concurrencia he aprendido que tenemos un hilo principal que ejecuta main () en cada aplicación que creamos. Que yo sepa, cuando usamos Swing para crear aplicaciones GUI tenemos otro hilo (Event Dispatcher Thread). Entonces, si no me equivoco, en cada aplicación de GUI basada en Swing hay al menos dos hilos. Esto hace que cada aplicación GUI sea multiproceso. Y en algunos artículos y tutoriales que he leído, dice que Swing no admite el subprocesamiento múltiple, por lo tanto, todos los componentes de la GUI deben crearse y modificarse solo en el subproceso de Event Dispatcher; de lo contrario, pueden surgir errores de interferencia en la memoria y de inconsistencia en la memoria.

Incluso en el ejemplo más simple de Wikipedia (http://en.wikipedia.org/wiki/Swing_%28Java%29), se hace así a través del método invokeLater.

Entonces, ¿cuál es el verdadero enfoque? Donde me equivoco

Respuestas a la pregunta(2)

Su respuesta a la pregunta