Descarga la aplicación para disfrutar aún más
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/
Compartir