Introducción a los Threads Java

Documentos relacionados
PROGRAMACION CONCURRENTE Y DISTRIBUIDA. IV.1 Executor framework: Threads pool

Sincronización por Colas en en Java

Ejecución de hebras. En realidad, todas las aplicaciones escritas en Java son aplicaciones multihebra (recuerde el recolector de basura).

Programación concurrente

Programación Concurrente y de Tiempo Real Guión de prácticas 4: Creación y control de Hilos en Java

Concurrencia en Android LSUB, GYSC, URJC

Programación concurrente en Java

TEMA 3: Creación y Control De Threads en Java

PROGRAMACION CONCURRENTE Y DISTRIBUIDA. IV.2 Tareas periódicas: Timer, TimerTask y ScheduledThreadPoolExecutor classes

Concurrencia en Android LSUB, GYSC, URJC

Threads o Hilos. Un thread en JAVA comienza como una instancia de java.lang.thread antes de convertirse en un hilo de ejecución.

MONITORES EN JAVA. Antonio Tomeu Control de la Concurrencia en Java: API Estándar

Programación concurrente en Java. Breve introducción. Miguel Ángel LATRE Dept. de Informática e Ingeniería de Sistemas

Otras formas de Sincronización en Java

dit UPM Tema 2: Concurrencia /threads (java) Análisis y diseño de software José A. Mañas

Unidad Didáctica 3. Tipos genéricos. Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos

Examen parcial Convocatoria de junio de 2005 FUNDAMENTOS DE LA PROGRAMACIÓN

Threads. La plataforma JAVA soporta programas multhreading a través del lenguaje, de librerías y del sistema de ejecución. Dos.

Laboratorio I Java Threads (Silberschatz Galvin)

HOJA DE EJERCICIOS 5 PROGRAMACIÓN CON EXCEPCIONES EN JAVA

Colas. 5.1 Implementación

Programación concurrente Hebras

El servicio de echo con sockets

Tema 6. Threads: programas multitarea

Clases abstractas e interfaces en Java

PROGRAMACIÓN ORIENTADA A OBJETOS 10/02/2009. Examen de Java. Nombre: DNI: Titulación:

Multienhebrado en Java Un toque de sincronización Transporte en Java Ejemplo conjunto

Diseño de tipos Igualdad, representación, código, copia y relación de orden

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

dit Programación concurrente Sincronización condicional UPM

PROGRAMACIÓN ORIENTADA A OBJETOS 1/7/2009. Examen de Java. Nombre: DNI: Titulación:

Programación Orientada a Eventos

TEMA 6: API Java para Concurrencia de Alto Nivel

PROGRAMACIÓN EN JAVA. { una línea para definir, crear o ejecutar ; }

Programación Concurrente en Java: Threads. Ejemplos de programación concurrente. Luis Fernando Llana Díaz. 24 de abril de 2008

Estructuras de control selectivas

Depto. Ingeniería de Sistemas Telemáticos Universidad Politécnica de Madrid ETSI Telecomunicación Fundamentos de Programación 15 de diciembre de 2011

75-62 Técnicas de Programación Concurrente II 2004 java Threads

Ingeniería del Software Separación entre Presentación y Lógica del Negocio

TEMA 5: Control de la Concurrencia en Java (API Estándar)

PRIMER EXAMEN PARCIAL. 5 de febrero de SOLUCIONES

Multitarea en Java. Rafa Caballero - UCM

BENEMERITA UNIVERSIDAD AUTONOMA DE PUEBLA FACULTAD DE CIENCIAS DE LA COMPUTACIÓN LICENCIATURA EN CIENCIAS DE LA COMPUTACIÓN

INSTITUTO TECNOLOGICO DE VILLAHERMOSA

Tema 6 Patrones de Diseño. Programación Orientada a Objetos Curso 2010/2011

PROGRAMACION DISTRIBUIDA

Tema 2: Aplicaciones Multihilo, Cliente Servidor

Tema 12: Programación multihilo

Ejemplo. class SiNoThread extends Thread { private String SiNo; static int Contador = 0; public SiNoThread(String s) { super(); SiNo = s; }

Práctica #0. Factoriales con Threads en Java. Pepper Pots (A ), Anthony Stark (A ) 18 de enero, 2017.

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

Conceptos Básicos de Concurrencia en Java

Java y JVM: programación concurrente. Adolfo López Díaz

} Antonio Tomeu API Java para Concurrencia 5 Antonio Tomeu API Java para Concurrencia 6 de Alto Nivel

PROGRAMACION CONCURRENTE Y DISTRIBUIDA. IV.3 Monitorización de excepciones en Threads

PROGRAMACION CONCURRENTE

UNIDAD III.- Programación Concurrente

Práctica 10a. Práctica 10a. José M. Ordax

PROGRAMACION DISTRIBUIDA MobileTracker: Ejemplo de implementación con RMI

Java RMI Remote Method Invocation. Invocación Remota de Métodos en Java

Examen de Programación 1. Viernes 31/enero/2014. Problema 1 o (2.5 puntos) Disponer un documento de identificación con fotografía sobre la mesa.

Ejercicio 4. EJB Sesión - Sistema SGA. Java EE. Ejercicio 4. EJB Sesión Sistema SGA. Curso de Java EE

Java Optional ifpresent y como utilizarlo

Tutorial 1: Desarrollo de un plugin

Práctica 11e. Práctica 11e. José M. Ordax

Arquitecturas cliente/servidor

Programación Concurrente en Java

Hilos. Índice. Copyright Dept. Ciencia de la Computación e IA All rights reserved.

1. Introducción. 1.1 Construcción de una aplicación CORBA

Algoritmos y Estructuras de Datos Iteradores. Guillermo Román Díez

Hoja de ejercicios cortos Concurrencia Segundo semestre

Multitarea En Swing. Varios hilos trabajadores, también conocidos como hilos en segundo plano.

Tema 4. Excepciones en Java

Programación Concurrente en Java: Threads

Excepciones. Excepciones

Parte I: Programación en un lenguaje orientado a objetos

Asignatura. Taller de Computación VI. Módulo VI Threads

Procesamiento distribuido en Java

HERENCIA (2ª parte) En Java todas las clases derivan de otra, aunque no se diga explícitamente.

Examen escrito de Programación 1

Esta aplicación se compone de 3 programas o clases, según el siguiente esquema: SueldoMedio.java. Sueldo.java

Introducción a Java 10/02/2011. Tokens. Juan Manuel Fernández Peña Curso Rev Tokens. Tokens

Transcripción:

75-62 Técnicas de Programación Concurrentes II Lic. Ing. Osvaldo Clúa 2014 Facultad de Ingeniería Universidad de Buenos Aires Introducción a los Threads Java

Para crear un nuevo Thread Se extiende la clase Thread. Pero esto significa crear un nuevo tipo de Thread. Se implementa la Interface Runnable Que es la forma preferido. Se debe hacer override al método run() 2

Un timer con un tick por segundo public class Timer01 implements Runnable { private int val = 0; boolean sigue = true; Timer01GUI migui; Timer01(Timer01GUI lagui){ migui=lagui; public String tostring(){ return String.valueOf(val); private void inc() { val++; migui.setval(tostring()); public void run() { migui.setid(string.valueof( Thread.currentThread().getId())); while (sigue) { try { Thread.sleep(1000); catch (InterruptedException ex) { ex.printstacktrace(); inc(); 3

Estados de un thread 4

Proyecto Convertir el Timer en un CountDown. Que comience cada instancia en un número distinto. Que se detenga al llegar a cero. 5

java.util.concurrent.executor public interface Executor { void execute(runnable command); Es una abstracción para la ejecución de Threads. Provee soporte para el ciclo de vida de la ejecución, estadísticas, administración y monitoreo. Separa la definición de las Threads de su mecánica de ejecución. 6

java.util.concurrent. ExecutorService Es una Sub Interface de Executor con los métodos para administrar el ciclo de vida. Algunos de sus métodos son: boolean awaittermination(long timeout, TimeUnit unit) boolean isshutdown() boolean isterminated() void shutdown() List<Runnable> shutdownnow() 7

ThreadPoolExecutor implements ExecutorService Administra un pool de threads (worker Threads). Las tareas se toman de una cola. Las threads se reusan en lugar de crear una nueva cada vez. El tamaño del pool puede fijarse. ScheduledThreadPoolExecutor Es una subclase que agrega planificación 8

java.util.concurrent Class Executors Es una Factory para crear objetos que implementan ExecutorService (y otras). static ExecutorService newcachedthreadpool() static ExecutorService newcachedthreadpool(threadfactory threadfactory) Crea los Threads que necesita, pero reusa si hay disponibles static ExecutorService newfixedthreadpool(int nthreads) static ExecutorService newfixedthreadpool(int nthreads, ThreadFactory threadfactory) Crea un pool con un número fijo de Threads 9

Ejemplo Para el CountDown (Timer modificado) ExecutorService eje = Executors.newFixedThreadPool(n / 2); for (int i = 0; i < n; i++) { eje.execute(tick[i]); try { Thread.sleep(duerme); eje.shutdown(); catch (InterruptedException ex) { eje.shutdown(); System.out.println("Se pidió Shutdown"); 10

Ejemplo Reusan el mismo thread Aún son se asignó thread Qué pasó con el Shutdown? Repetir para otra cantidad de timers. Cambiar a shutdownnow() 11

Ejemplo Se usó un CachedThreadPool (observe la repetición del thread 14). Hágalo. 12

Interface Callable<V> V call() throws Exception Se la usa cuando se quiere que un worker thread devuelva un valor (cálculo asincrónico). Interface Future <V> V get() V get(long timeout, TimeUnit unit) boolean isdone() boolean Cancel() boolean iscancelled Representa el resultado del cálculo asincrónico. También se crean con ExecutorService 13

Ejemplo import java.util.concurrent.*; public class TraigoString implements Callable<String> { int duermo = 0; public TraigoString(int n) { duermo = n; @Override public String call() throws Exception { System.out.println("Comienza el calculo de " + duermo + " soy " + Thread.currentThread().getId()); try { Thread.sleep(duermo * 1000); catch (Exception exception) { return ("Devuelto el futuro "+String.valueOf(duermo)); 14

Ejemplo public static void main(string[] args) { int cantthreads = 2; int cantfutures = 6; Future<String> result[] = new Future [cantfutures] ; ExecutorService eje = Executors.newFixedThreadPool(cantThreads); for (int i = 0; i < cantfutures; i++) { result[i] = eje.submit(new TraigoString(i)); for (int i = 1; i < 10; i++) { impterminado(result); //Imprime el resultado de los terminados try { Thread.sleep(i * 1000); // y lo pone en null catch (Exception exception) { if (todasnull(result)) break; //si todos los futuros terminaron System.out.println("Vuelta "+i); System.out.println("Final"); System.exit(0); 15

Obtener el valor futuro con get() public static void impterminada(future<string>[] f) { for (int i = 0; i < f.length; i++) { if ((f[i]!=null) && (f[i].isdone())) { try { System.out.println("Terminada la task " + i + " con el valor <<" + f[i].get()+">>"); catch (InterruptedException ex) { Logger.getLogger(PruebaFuturo.class.getName()).log(Level.SEVERE, null, ex); catch (ExecutionException ex) { Logger.getLogger(PruebaFuturo.class.getName()).log(Level.SEVERE, null, ex); f[i]=null; 16

Salida del Ejemplo Comienza el calculo de 0 soy 10 Comienza el calculo de 1 soy 11 Comienza el calculo de 2 soy 10 Comienza el calculo de 3 soy 11 Vuelta 1 Terminada la task 0 con el valor <<Devuelto el futuro 0>> Terminada la task 1 con el valor <<Devuelto el futuro 1>> Comienza el calculo de 4 soy 10 Vuelta 2 Terminada la task 2 con el valor <<Devuelto el futuro 2>> Comienza el calculo de 5 soy 11 Vuelta 3 Terminada la task 3 con el valor <<Devuelto el futuro 3>> Terminada la task 4 con el valor <<Devuelto el futuro 4>> Vuelta 4 Terminada la task 5 con el valor <<Devuelto el futuro 5>> Final 17

Proyecto Rehacer el Timer con Observador Observable. Un botón de Parcial ( Lap ). Un botón de Start/Stop. Después del Stop, el Start vuelve a comenzar en cero. 18

Proyecto Start Lap Lap + Stop Continue 19