2010-07-13 4 views
14

Con JDK> = 1.5, ¿la forma preferida de iniciar un hilo es siempre un Executor o Executor Service, o hay razones para preferir utilizar un Thread.start si no necesita lo que proporciona un ExecutorService?¿Debería utilizar siempre un ExecutorService en lugar de iniciar su propio hilo?

Para syncronized, solía pensar que el uso de las nuevas implementaciones de bloqueo era preferible, hasta que estuve explained otherwise. Así que me pregunto lo mismo sobre los ejecutores. ¿Son solo una forma de manejar casos más complejos, o deberían ser la opción estándar?

+0

Ambas respuestas excelentes, pero tuve que dar la aceptada que hizo aparecer la comparación con Vector y Hashtable. – Yishai

Respuesta

10

En lo personal, ya que Java 5, he completamente sobra Thread y ThreadGroup, ya que proporcionan de manera menos personalización y funcionalidad que ExecutorService.

Al usar ExecutorService, sé que puedo usar Callable, sé que puedo (con un poco de sobrecarga) programar tareas repetidas. Como consecuencia, considero la instanciación directa de Thread objetos obsoletos, como Vector y Hashtable.

10

Java Concurrency in Practice Unidos por lo menos claramente en la sección 6.2 .:

La abstracción primaria para la ejecución de tareas en las bibliotecas de clases de Java es noThread, pero Executor. [...]

El uso de un ejecutor suele ser la ruta más fácil para implementar un diseño productor-consumidor en su aplicación.

2

Escribir correctamente el código de subprocesos múltiples es muy difícil. La belleza del framework Executor es que implementa la mayor parte del trabajo pesado que los desarrolladores encontrarán y solo requiere que implemente Callable o Future y programe a la API java.util.concurrent. En mi humilde opinión, resulta en un código mucho más legible y presenta muchas menos oportunidades para implementarlo incorrectamente debido a la complejidad de la gestión adecuada de los hilos.

Cuestiones relacionadas