Pregunta

Ejecutor parece una abstracción limpia. ¿Cuándo desea utilizar hilo directamente en lugar de confiar en el más robusto ejecutor?

¿Fue útil?

Solución

Para darle un poco de historia, ejecutores solamente se añadieron como parte del estándar de Java en Java 1.5. Así que en cierto modo los ejecutores pueden ser vistos como una nueva abstracción mejor para hacer frente a tareas ejecutables.

Un poco de una simplificación excesiva que viene ... - Ejecutores son hilos hacen bien lo que los utilizan con preferencia

.

Otros consejos

Yo uso del hilo cuando necesito algún tipo de procesamiento de mensajes basada en extracción. P.ej. Una cola es tomar () - en en un bucle en un hilo separado. Por ejemplo, en que se coloca una cola en un contexto caro -. Le dijo una conexión JDBC, conexiones de JMS, archivos de proceso desde un solo disco, etc.

Antes de entrar maldije, ¿tiene algún escenario?

Editar

Como otros han dicho, la interfaz (Executor) ExecutorService tiene más potencial, como se puede utilizar el Executors para seleccionar un comportamiento: programada, priorizados, etc. caché en Java 5+ o una backport Juc para Java 1.4

El marco ejecutor tiene protección contra estrellado runnables y automáticamente volver a crear subprocesos de trabajo. Un inconveniente en mi opinión, que usted tiene que shutdown() explícita y awaitTermination() ellos antes de salir de su aplicación - que no es tan fácil en aplicaciones GUI. Si utiliza colas acotadas es necesario especificar un RejectedExecutionHandler o los nuevos runnables botados.

Es posible echar un vistazo a Brian Goetz et al: Java concurrencia en la práctica (2006)

No hay ninguna ventaja de utilizar hilos primas. Siempre se puede suministrar Agentes ejecutivos con una fábrica de hilos, por lo que incluso la opción de creación de hilos preferidos está cubierto.

Usted no usa hilo a menos que necesite un comportamiento más específico que no se encuentra en el mismo hilo. A continuación, extender rosca y agregue su comportamiento específicamente querido.

Otras ventas sólo tiene que utilizar Ejecutable o ejecutor.

Bueno, pensé que un ThreadPoolExecutor proporciona un mejor rendimiento para que gestiona un grupo de subprocesos, lo que minimiza la sobrecarga de crear instancias de un nuevo hilo, la asignación de memoria ...

Y si se va a lanzar miles de hilos, que le da una cierta funcionalidad de gestión de colas que tendría que programar por su cuenta ...

Hilos y ejecutores son herramientas diferentes, utilizado en diferentes escenarios ... Como yo lo veo, es como preguntar por qué debería utilizar ArrayList cuando puedo usar HashMap? Son diferentes ...

paquete java.util.concurrent proporciona una interfaz ejecutor y se puede utilizar para hilo creado.

La interfaz Ejecutor proporciona un método único, ejecutar, diseñado para ser un reemplazo drop-in para un lenguaje de hilo creación común. Si r es un objeto ejecutable, y e es un objeto Ejecutor puede reemplazar

(nuevo hilo (r)) start ();.

con

e.execute (r);

Consulte aquí

Siempre es mejor preferir Ejecutor a Thread incluso para un solo hilo como a continuación

ExecutorService fixedThreadPool = Executors.newFixedThreadPool(1);

Puede utilizar Thread sobre Executor en escenarios siguientes

  1. Su aplicación necesita hilo (s) limitada y la lógica de negocio es simple

  2. Si sencillo modelo multi-threading abastece sus necesidades sin rosca Pool

  3. se tiene la certeza de gestionar escenarios de hilo (s) del ciclo de vida + manejo de excepciones con ayuda de las API de bajo nivel en las áreas siguientes: Inter thread communication, Exception handling, reincarnation of threads debido a errores inesperados

y un último punto

  1. Si su aplicación no necesita personalización de diversas características de ThreadPoolExecutor

    ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, 
    TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, 
    RejectedExecutionHandler handler)
    

En todos los demás casos, se puede ir por ThreadPoolExecutor

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top