2010-12-23 8 views

Respuesta

11

Thread y Runnable formaban parte de Java 1.0; son tan buenos como lo eran en ese entonces.

Las nuevas clases de concurrencia destilan todo lo que se ha aprendido sobre multi-threading desde entonces (gracias, Doug Lea y otros). Escribir código multiproceso es terriblemente difícil. Las nuevas clases de concurrencia, incluido SwingWorker, intentan hacer eso más fácil.

Comience anotando los genéricos para una escritura fuerte. Hay un mecanismo incorporado para publicar y procesar resultados finales e intermedios.

Sería posible imitar esto con Thread y Runnable, pero SwingWorker lo ha hecho por usted.

+1

¿SwingWorker es realmente parte de las nuevas clases de concurrencia? Creo que es parte de la API de Swing y la razón principal para usarla es debido a las limitaciones con respecto al Tema de envío de evento (EDT). –

+1

No forma parte del paquete de simultaneidad, pero lo consideraría con el mismo espíritu. Podría estar equivocado – duffymo

+0

Sí, pero básicamente es un futuro, ¡así que está todo bien! – HaveAGuess

12

SwingWorker se ocupa de algunos detalles, como actualizaciones de la interfaz de usuario mientras se ejecuta la tarea o una vez que finaliza la tarea. Deben ejecutarse en el hilo Swing EDT. Puedes hacerlo tú mismo, pero es muy fácil hacerlo mal.

14

creo que la documentación de la SwingWorker es bastante bueno:

Una clase abstracta para realizar tareas largas interfaz gráfica de usuario que interactúa en un hilo dedicado.

Al escribir una aplicación mediante oscilación multi-hilo, hay dos restricciones a tener en cuenta: (se refiere a How to Use Threads para más detalles):

  • tareas que consumen mucho tiempo no se deben ejecutar en el hilo de envío del evento. De lo contrario, la aplicación se vuelve que no responde.
  • Se debe tener acceso a los componentes Swing solo en la secuencia de envío de eventos .

Estas restricciones significan que un aplicación GUI con el tiempo intensivo necesidades informáticas al menos dos hilos: 1) un hilo para realizar el largo tarea y 2) el hilo de eventos Despacho (EDT) para todos GUI -actividades relacionadas. Esto implica la comunicación entre hilos que puede ser difícil de implementar en .

SwingWorker está diseñado para situaciones donde se necesita para tener una larga carrera tarea en un subproceso en segundo plano y al día a la interfaz de usuario, ya sea cuando hecho, o al procesar. Las subclases de SwingWorker deben implementar el método doInBackground() para realizar el cálculo de fondo .

seguramente usted puede hacer esto utilizando hilo, tiempo de ejecución y SwingUtilities (invokeLater) pero es más fácil y, probablemente, menos propenso a errores utilizando la clase SwingWorker.

6

SwingWorker encapsula la interacción correcta con el hilo de envío de eventos. Runnable no.

Cuestiones relacionadas