Estoy confundido en lo siguiente:
Para usar hilos en un programa Java, la forma más simple es extender la clase Thread e implementar la interfaz ejecutable (o simplemente implementar ejecutable).
Para iniciar la ejecución del subproceso. debemos llamar al método Thread start(), que a su vez llama al método run() del hilo. Y entonces el hilo comienza.
El método start() (a menos que sea incorrecto) se debe llamar exactamente y solo una vez para cada subproceso. Como resultado, las instancias de subprocesos no pueden reutilizarse a menos que de alguna manera el método de ejecución en sí mismo se ejecute en un ciclo infinito que facilite una implementación personalizada del reutilización del subproceso.
Ahora el javadoc link text dicereutilización de hilo java a través del ejecutor
llamadas a ejecutar reutilizará hilos construidos previamente si está disponible
No entiendo cómo esto se lleva a cabo. Proporciono en el método de ejecución del método ejecutor mi hilo personalizado, p.
ExecutorService myCachedPool = Executors.newCachedThreadPool();
myCachedPool.execute(new Runnable(){public void run(){
//do something time consuming
}});
¿Cómo se puede reutilizar esta hebra personalizada que delego en el marco ejecutor?
¿El ejecutor puede llamar al método start() más de 1 vez, mientras que nosotros no podemos en nuestros programas? ¿Estoy malentendiendo algo?
Gracias.
@ Jon: Lo siento que te había perdido. Entonces, ¿los subprocesos internos del framework se reutilizan y no el ejecutable que paso como argumento para ejecutar? Mi hilo que delegue en el marco se volverá a crear instancias cada vez, pero por la misma instancia del hilo interno creado por el marco? – Cratylus
@ user384706: Sí. Su ejecutable * no es * un hilo, es solo una tarea para ejecutar. Necesita diferenciar entre los dos; son muy diferentes. –
@Jon: Muchas gracias. Lo único de lo que no estoy seguro es cuál es el beneficio de usar Executors.newCachedThreadPool(); Porque si mi clase que implementa el ejecutable (para una tarea) es cara de ser instanciada, no será reutilizada y el mismo hilo del marco, seguirá usando nuevas instancias de la tarea. Entonces, ¿qué ganaría con esta API? A menos que el concepto sea que cada clase que implemente ejecutable sea mínima. – Cratylus