Event Dispatch Thread

Event Dispatch Thread (Java)
Información sobre la plantilla
Concepto:Hilo o subproceso encargado de procesar los eventos en las aplicaciones de interfaz gráficas escritas en Java que usan los toolkits gráficos AWT o Swing (biblioteca gráfica).

El Event Dispatch Thread (EDT), es un hilo o subproceso usado en Java para procesar eventos provenientes desde la cola de eventos de interfaz gráfica de las bibliotecas gráficas AWT y Swing.

Estos eventos son primariamente eventos actualizados que provocan los componentes de las interfaces gráficas para redibujarse por si mismos, o eventos de entrada desde los dispositivos de entrada tales como el teclado y el ratón. El Event Dispatch Thread es el único hilo válido para actualizar el estado visual de los componentes visibles de las aplicaciones de interfaces gráficas. La actualización de componentes visibles desde otros hilos es la fuente de muchos errores comunes en los programas Java que usan Swing. El Event Dispatch Thread es llamado Primordial Worker en Adobe Flash e UI Thread en .NET Framework y en Android.

Swing/AWT y Seguridad de Hilos

Swing está basado en el viejo AWT toolkit para el soporte de ventanas alto nivel y para el despacho de eventos. Cada vez que ejecutamos una aplicación Swing, se crean automáticamente tres hilos de ejecución. El primero de ellos, es el hilo principal (main thread). Un segundo hilo, llamado toolkit thread, se encuentra encargado de capturar los eventos del sistema, como las pulsaciones de las teclas del teclado y el movimiento del ratón. Aunque este hilo es vital, este es tan solo una parte de la implementación de AWT y nunca se ejecutará código de la aplicación. Los eventos capturados se enviarán a traves del tercer hilo, el EDT.

La mayoría del código que es invocado por métodos Swing también se ejecutan sobre el EDT. Esto es necesario porque muchos métodos de objetos Swing no son seguros: la invocación de estos desde múltiples hilos puede traer riesgos de interferencias de hilos o errores de consistencia en la memoria. Algunos métodos de componentes Swing están etiquetados "hilos seguros" en la especificación de la API; estos podrán ser invocados de modo seguro desde cualquier otro hilo. Todos los otros métodos de componentes Swing deberán ser invocados desde el Event Dispatch Thread. Aquellos programas que ignoren esta regla podrían funcionar correctamente la mayoría de las veces, pero estarán sujetos a impredecibles errores que serán difíciles de reproducir.

Es útil pensar acerca del código ejecutándose sobre el Event Dispatch Thread como una serie de tareas cortas. Muchas de estas tareas son invocaciones a métodos de manejo de eventos, tales como ActionListener.actionPerformed. Otras podrán ser planificadas por el código de la aplicación, usando invokeLater o invokeAndWait. Las tareas sobre el EDT deberán finalizar rápidamente; si ellas no lo hacen, aparecerán eventos no controlados y la interfaz de usuario se convertirá en no responsiva.

Importancia

El Event Dispatch Thread es de relevante importancia, debido a que está a cargo de despachar los eventos capturados por el hilo del toolkit para los componentes apropiados y llamar los métodos de dibujado de los mismos. Este es también el hilo sobre el cual los programadores interactúan con Swing. Por ejemplo, si se presionara una tecla en un JTextField, el Event Dispatch Thread despachará los eventos de presión de la tecla hacia el escuchador (listener) de tecla de dicho componente. El componente, entonces actualiza su modelo y envía una solicitud de dibujado hacia la cola de eventos. El Event Dispatch Thread retira de la cola la solicitud de dibujado y notifica al componente una segunda vez pidiéndole a este redibujarse por si mismo. Si los eventos son recibidos más rápido que lo que estos pueden ser entregados, el Event Dispatch Thread encolará estos hasta que los mismos puedan ser procesados.

Equivalentes

Véase también

Enlaces externos

Bibliografía