Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
CLASE 14 MODELO DE DESARROLLO DE PROGRAMAS Y PROGRAMACION CONCURRENTE FAC.DE INGENIERIA - UNJu Executor framework INTERFACE EXECUTOR SERVICE La interface java.util.concurrent.ExecutorService permite gestionar la programación concurrente de 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.de ExecutorService: 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 de ExecutorServices, q permite obtener 1serie de implementaciones estándar El Mét.estático newCachedThreadPool: retorna 1de las implementaciones 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 x 60 segundos se destruyen. No tiene límite de hilos a crear. Mét.execute: es el encargado de realizar la ejecución de 1hilo, recibe 1objeto q implementa la interface Runnable en la cual se define el proceso a ejecutar. Mét. shutdown: baja de forma segura todos los hilos de ejecución creados. Florencia Resaltado Florencia Resaltado OTRAS IMPLEMENTACIONES DE LA CLASE EXECUTORS newFixedThreadPool: crea 1 pool de hilo de ejecuciones con 1tamaño fijo, si se trata de ejecutar 1 tarea nueva cuando todos los hilos de 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 de 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 ejecucion finalizo. 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 se puede tener certeza de 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. SCHEDULEDEXECUTORSERVICE Extiende de ExecutorService, aparece xq ciertas tareas necesitan ejecutarse de 1manera programada, como la ejecución de 1 tarea dada a intervalos determinados o en un momento específico. Se encuentra en el paquete java.util.concurrent. Ej.de ExecutorService: 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 de la ejecución del thread. Método 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 de 1hilo, recibe 1objeto q implementa la interface Runnable en la cual se define el proceso a ejecutar. Mét. shutdown: baja de forma segura todos los hilos de 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étodo scheduleAtFixedRate: Maneja 2 tiempos, el de espera p/la 1ra.ejecución y el tiempo de ejecuciones sucesivas luego de ocurrida la 1ra. Método scheduleWithFixedDelay: La forma de ejecución es similar a la anterior con la diferencia q las ejecuciones sucesivas esperan la finalización de 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/ BIBLIOGRAFÍA CONSULTADA http://aquiseprograma.co/2015/10/como-utilizar-java-lang-concurrent-executorservice/ http://aquiseprograma.co/2015/10/como-utilizar-scheduledexecutorservice/
Compartir