Logo Studenta

Tema 16 Clase 16 - Executor framework

¡Estudia con miles de materiales!

Vista previa del material en texto

CLASE 16
MODELO DE DESARROLLO DE PROGRAMAS Y 
PROGRAMACION CONCURRENTE – 2.019
FAC.DE INGENIERIA - UNJu
Executor framework
INTERFACE EXECUTOR SERVICE
La int.java.util.concurrent.ExecutorService permite gestionar la program.concurrente
d 1 forma + sencilla y optima, representa 1mecanismo de ejecuciones asíncronas 
p/ejecutar tareas en 2do.plano, se encuentra en el paquete java.util.concurrent. Ej.:
ExecutorService executor = Executors.newCachedThreadPool(); 
// Inicia 1pool de threads
// Ejecuta un thread del pool.
executor.execute(new Runnable() {
@Override
public void run() {
System.out.println("Tiempo: " + System.currentTimeMillis());
}
});
System.out.println("Tiempo 2: " + System.currentTimeMillis());
// Finalizamos el pool.
executor.shutdown();
Executors: Es la clase proveedora d ExecutorServices, q 
permite obtener 1serie d implementaciones estándar
El Mét.estático newCachedThreadPool: retorna 1d las implem. estándar 
p/ExecutorServices, q mantiene en cache los hilos de ejecución, si no 
existe 1hilo de ejecución disponible crea 1nuevo y los hilos en cache q 
no se usan x60segundos se destruyen. No tiene límite d hilos a crear.
Mét.execute: realiza la ejecución d 1hilo, recibe 1objeto q 
implementa la int.Runnable en la cual s define el proceso a ejecutar.
Mét. shutdown: baja de forma segura todos los hilos de ejecución creados.
OTRAS IMPLEMENTACIONES DE LA CLASE EXECUTORS
newFixedThreadPool: crea 1 pool d hilo de ejecuciones con 1tamaño fijo, si s 
trata de ejecutar 1 tarea nueva cuando todos los hilos d ejecución están 
trabajando, este último debe esperar y si algún hilo muere x1falla durante su 
ejecución, uno nuevo será creado en el pool cuando sea solicitado.
newScheduledThreadPool: también crea un pool de hilos, pero estos pueden 
ser agendados p/ejecutarse en cierto momento o periódicamente.
newSingleThreadExecutor: crea 1pool d 1 solo hilo de ejecución, q obliga a q 
las tareas sean ejecutadas de manera secuencial, si el hilo muere x la falla de 
ejecución, crea 1nuevo en la sig. petición.
newSingleThreadScheduledExecutor: similar a las 2 anteriores, es 1pool de 1solo 
hilo pero este puede ser agendado p/ejecutarse en cierto momento o 
periódicamente.
Instancia de la clase ThreadPoolExecutor: personaliza 1instancia de la clase 
ThreadPoolExecutor.
Instancia de la clase ScheduledExecutorService: es igual a la anterior pero 
permite personalizar 1 instancia de ScheduledExecutorService. 
OTRAS FORMAS DE USAR EXECUTORSERVICE
Método submit (Runnable): al igual q execute recibe un Runnable, pero en 
este caso retorna 1objeto de tipo Future, la idea de este es poder conocer en 
q momento el hilo finalizó su ejecución. Ej.
// Inicia 1pool de threads
ExecutorService executor = Executors.newCachedThreadPool();
// Ejecuta 1 thread del pool
Future future = executor.submit(new Runnable() {
@Override
public void run() {
System.out.println("Tiempo: " + System.currentTimeMillis());
}
});
// Retorna null cuando el hilo de ejecución finalizó
System.out.println(future.get());
executor.shutdown(); // Finaliza el pool
OTRAS FORMAS DE USAR EXECUTORSERVICE (CONT)
Método submit (Callable): similar a la anterior pero recibe 1objeto de tipo 
Callable.
Método invokeAny: ejecuta 1lista de objetos Callable y como resultado 
obtiene el valor retornado x 1 de ellos, aunque no s tiene certeza d cual.
Método invokeAll: similar al anterior pero recibe 1lista de Callable, con la 
diferencia q en esta se recibe 1 lista de objetos Future, de los cuales se podrá 
monitorear el resultado final.
Diferencia entre Callable y Runnable:
La interfaz Callable es similar a Runnable, en el sentido d q ambas están 
diseñadas p/clases cuyas instancias se ejecutan potencialmente x otro hilo. 
Pero 1Runnable, no devuelve 1result.y no puede arrojar1excepción marcada.
• A Callable necesita implementar el mét.call() mientras q Runnable necesita 
implementar el mét.run().
• Un Callable puede devolver un valor, pero un Runnable no puede.
• 1Callable puede lanzar 1excepción comprobada pero1Runnable no puede.
• A Callable s puede usar con ExecutorService#invokeXXX(Collection< ? 
extends Callable> tasks) métodos pero Runnable no.
SCHEDULEDEXECUTORSERVICE
Extiende d ExecutorService, aparece xq ciertas tareas necesitan ejecutarse d 
1manera programada, como la ejecución d 1 tarea dada a intervalos determinados 
o 1momento específico. S encuentra en el paquete java.util.concurrent. Ej.
ScheduledExecutorService executor = Executors.
newSingleThreadScheduledExecutor();
ScheduledFuture future = executor.schedule(
new Callable<String>() {
@Override
public String call() throws Exception {
return "Ya pasaron 10 segundos.";
}
}, 10, TimeUnit.SECONDS);
System.out.println(future.get());
executor.shutdown();
Clase ScheduledFuture: Representación futura d la ejecución del thread.
Mét.Schedule: Recibe 3parámetros, 
el 1ro.1objeto Callable el cual 
contiene el proceso a ejecutar x el 
Thread. El 2do.parámetro es 
1entero q representara el tiempo a 
esperar p/la ejecución. La unidad 
de tiempo a medir la enumeración 
se llama TimeUnit
Mét.execute: es el encargado de realizar la ejecución 
d 1hilo, recibe 1objeto q implementa la interface 
Runnable en la cual s define el proceso a ejecutar.
Mét.shutdown: baja d forma segura todos los hilos d ejecución creados.
OTRAS FORMAS DE USAR SCHEDULEDEXECUTORSERVICE
Método Schedule (Runnable): similar al ej.anterior con la diferencia q el 
parámetro no es un objeto Callable sino un objeto Runnable:
ScheduledExecutorService executor = Executors.
newSingleThreadScheduledExecutor();
ScheduledFuture future = executor.schedule(
new Runnable() {
@Override
public void run() {
System.out.println("Ya pasaron 10 segundos");
}
}, 10, TimeUnit.SECONDS);
future.get();
executor.shutdown();
Mét.scheduleAtFixedRate: Maneja 2 tiempos, el d espera p/la 1ra.ejecución y 
el tiempo d ejecuciones sucesivas luego d ocurrida la 1ra.
Mét.scheduleWithFixedDelay: La forma d ejecución es similar a la anterior con 
la difer.q las ejecuciones sucesivas esperan la finalizac.d la ejecución anterior.
• Página web consultada, accedidas en Octubre de 2.018: 
o http://aquiseprograma.co/2015/10/como-utilizar-java-lang-concurrent-
executorservice/
o http://aquiseprograma.co/2015/10/como-utilizar-
scheduledexecutorservice/
o https://www.dokry.com/14805
BIBLIOGRAFÍA CONSULTADA
http://aquiseprograma.co/2015/10/como-utilizar-java-lang-concurrent-executorservice/
http://aquiseprograma.co/2015/10/como-utilizar-scheduledexecutorservice/

Continuar navegando