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

Tamaño: px
Comenzar la demostración a partir de la página:

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

Transcripción

1 TEMA 6: API Java para Concurrencia de Alto Nivel CONTENIDO API Java 5 de Control de la Concurrencia Clases para Gestión de Variables Atómicas Clase java.concurrent.util.concurrent.semaphore Clase java.concurrent.util.concurrent.cyclicbarrier El API java.concurrent.util.concurrent.locks y la interfaz Condition Colas Contenedoras Sincronizados Pool de Threads: Concepto, utilidad y utilización BIBLIOGRAFÍA RECOMENDADA: [Göe06] Göetz et al. Java Concurrency in Practice, [Oaks04] Oaks & Wong. Java Threads. O`Reilly, Antonio Tomeu API Java para Concurrencia 1 de Alto Nivel Generalidades Disponible a partir de Java 5 Mejoras respecto a los mecanismos previos de control de la concurrencia Generan menos sobrecarga en tiempo de ejecución Permiten controlar la e.m. y la sincronización a un nivel más fino Soporta primitivas clásicas como los semáforos o las variables de condición en monitores Añade nuevas primitivas y gestión de hilos mediante pools. Antonio Tomeu API Java para Concurrencia 2 de Alto Nivel Qué paquetes usar? Disponible en los paquetes: java.util.concurrent java.util.concurrent.atomic java.util.concurrent.locks Cierres para control de e.m. Semáforos, Barreras Colecciones (clases contenedoras) concurrentes de acceso sincronizado Variables atómicas El API java.util.concurrent.atomic Conjunto de clases que soportan programación concurrente segura sobre variables simples tratadas de forma atómica Clases: AtomicBoolean,AtomicInteger, AtomicIntegerArray,AtomicLong,AtomicLong Array,AtomicReference<V>, etc. OJO: No todos los métodos del API de estas clases soportan concurrencia segura. Sólo aquellos en los que se indica que la operación se realiza de forma atómica Antonio Tomeu API Java para Concurrencia 3 de Alto Nivel Antonio Tomeu API Java para Concurrencia 4 de Alto Nivel import java.util.concurrent.atomic.*; class Hilo extends Thread AtomicInteger cont = null; //el contador es entero atómico public Hilo(AtomicInteger c) this.cont = c; //se incrementa cont, retornando el valor previo int valor = this.cont.incrementandget(); System.out.println(valor); EJERCICIO Escribir una condición de carrera usando objetos AtomicInteger y verificar que se preserva la e.m. public class prueba_var_atomic public static void main(string[] args) AtomicInteger cnt = new AtomicInteger(0); for(int i=0; i<100; i++) Hilo h = new Hilo(cnt); h.start(); Antonio Tomeu API Java para Concurrencia 5 Antonio Tomeu API Java para Concurrencia 6 de Alto Nivel 1

2 La clase java.util.concurrent.semaphore Permite disponer de semáforos de conteo de semántica mínima igual a la estándar de Djikstra, o aumentada. Métodos principales: Semaphore (long permits) acquire(), acquire(int permits) release(), release (int permits) tryacquire(); varias versiones avalaiblepermits() public class Bloqueo_Semaforo public static void main(string[] args) throws InterruptedException Semaphore sem = new Semaphore (2); sem.acquire(2); System.out.println("Semaforo actualizado a valor 0..."); System.out.println("y su estado es: "+sem.tostring()); System.out.println("Ahora intentamos adquirirlo..."); sem.tryacquire(); System.out.println("sin bloqueo por no conseguirlo"); System.out.println("Ahora intentamos adquirirlo..."); sem.tryacquire(3l, TimeUnit.SECONDS); System.out.println("tras esperar lo indicado sin consguirlo..."); sem.acquire(); System.out.println("Aquí no llegaremos nunca..."); Antonio Tomeu API Java para Concurrencia 7 de Alto Nivel Antonio Tomeu API Java para Concurrencia 8 de Alto Nivel Protocolo de Control de E.M. con Semáforos // Thread A try s.acquire(); catch (InterruptedException ex) //Bloque de código a ejecutar en e.m s.release(); // Thread B try s.acquire(); catch (InterruptedException ex) //Bloque de código a ejecutar en e.m s.release(); //En el programa principal, hacer siempre Semaphore s = new Semaphore (1); 9 Ejemplo de Control de E.M. con Semáforos public class Tarea_concurrente extends Thread Semaphore s; //referencia a un semaforo común a otros hilos public Tarea_concurrente(Semaphore param) s = param; public void run () for(;;) try s.acquire(); catch (InterruptedException e) System.out.println("Hilo "+this.getname()+" entrando a seccion critica"); s.release(); System.out.println("Hilo "+this.getname()+" saliendo de seccion critica"); Antonio Tomeu API Java para Concurrencia 10de Alto Nivel EJERCICIO Descargue la clase Tarea_Concurrente.java y compile Descargue la clase Protocolo_em_semaphore.java, compile y ejecute. Diseñe, utilizando semáforos, un código cuyos hilos se interbloqueen:deadlocksem.java Protocolo de Sincronización Inter-Hilos con Semáforos // Thread A public void esperarseñal(semaphore s) try s.acquire(); catch (InterruptedException ex) // Thread B public void enviarseñal(semaphore s) s.release(); //En el programa principal, hacer siempre Semaphore s = new Semaphore (0); Antonio Tomeu API Java para Concurrencia 11de Alto Nivel Antonio Tomeu API Java para Concurrencia 12de Alto Nivel 2

3 class HiloReceptor extends Thread Semaphore sem; public HiloReceptor(Semaphore s)sem = s; System.out.println("Hilo Receptor esta esperando la senal"); trysem.acquire(); catch (InterruptedException e) System.out.println("Hilo Receptor ha recibido la senal"); class HiloSenalador extends Thread Semaphore sem; public HiloSenalador(Semaphore s)sem = s; sem.release(); System.out.println("Hilo Senalador enviando senal..."); public class protocolo_sincronizacion_semaphore public static void main(string[] args) int v_inic_sem = 0; Semaphore s = new Semaphore(v_inic_sem); new HiloReceptor(s).start(); new HiloSenalador (s).start(); EJERCICIO Utilizando las semáforos que sean necesarios, provea la sincronización por turno cíclico de tres hilos diferentes. Nombre sus ficheros HA.java, HB.java, Implante ahora una lector-escritor con semáforos. Nombre sus ficheros LE1.java, LE2.java, Antonio Tomeu API Java para Concurrencia 13 de Alto Nivel Antonio Tomeu API Java para Concurrencia 14 de Alto Nivel La clase java.util.concurrent.cyclicbarrier Una barrera es un punto de espera a partir del cuál todos los hilos se sincronizan Ningún hilo pasa la barrera hasta que todos los hilos esperados llegan a ella Utilidad Unificar resultados parciales Inicio siguiente fase ejecución simultánea Protocolo de Barrera // Codigo de Thread public Hilo extends Thread P ublic Hilo (CyclicBarrier bar) try int i = bar.await(); catch (BrokenBarrierException e) catch (InterruptedException e) //codigo a ejecutar cuando se abre barrera //En el programa principal, hacer siempre int numhilos = n; //numero de hilo que abren barrera CyclicBarrier Barrera = new CyclicBarrier (numhilos); new Hilo(Barrera).start(); Antonio Tomeu API Java para Concurrencia 15de Alto Nivel Antonio Tomeu API Java para Concurrencia 16de Alto Nivel class Hilo extends Thread CyclicBarrier barrera = null; public Hilo (CyclicBarrier bar) barrera = bar; try int i = barrera.await(); catch (BrokenBarrierException e) catch (InterruptedException e) System.out.println("El hilo "+this.tostring()+" paso la barrera..."); EJERCICIO Un vector de 100 enteros es escalado mediante f(v[i])=v[i] 2. Posteriomente el vector se suma entero en un único número. Escriba un programa en java multihebrado (utilizando barreras) que realice la tarea: vectsum.java public class UsaBarreras public static void main(string[] args) int numhilos = 3; CyclicBarrier PasoANivel = new CyclicBarrier (numhilos); new Hilo(PasoANivel).start(); Antonio Tomeu API Java para Concurrencia 17 de Alto Nivel 18 3

4 El API java.util.concurrent.locks Proporciona clases para establecer sincronización de hilos alternativas a los bloques de código sincronizado y a los monitores Clases e interfaces de interés: ReentrantLock: proprociona cerrojos de e.m. de semántica equivalente a synchronized, pero con un manejo más sencillo. LockSupport: proporciona primitivas de bloqueo de hilos que permiten al programador diseñar sus clases de sincronización y cerrojos propios Condition:es una interface, cuyas instancias se usan asociadas a locks. Implementan variables de condición y proporcionan una alternativa de sincronización a los métodos wait, notify y notifyall de la clase Object. El API de la clase ReentrantLock Proporciona cerrojos reentrantes de semántica equivalente a synchronized. Métodos lock()-unlock() Método islocked() Método Condition newcondition() que retorna una variable de condición asociada al cerrojo Antonio Tomeu API Java para Concurrencia 19de Alto Nivel Antonio Tomeu API Java para Concurrencia 20de Alto Nivel Protocolo de Control de E.M. con ReentrantLock Protocolo de Control de E.M. con ReentrantLock Definir el recurso compartido donde sea necesario Definir un objeto c de clase ReentrantLock para control de la exclusión mutua. Acotar la sección crítica con el par c.lock() y c.unlock() class Usuario private final ReentrantLock cerrojo = new ReentrantLock(); //... public void metodo() cerrojo.lock(); try //... cuerpo del metodo en e.m. finally cerrojo.unlock() NOTA: Semántica equivalente a haber etiquetado el segmento de código crítico como synchronized. Útil para adaptar código concurrente antiguo a java 5. Antonio Tomeu API Java para Concurrencia 21de Alto Nivel Antonio Tomeu API Java para Concurrencia 22de Alto Nivel EJERCICIOS La Interfaz Condition Escribir un protocolo de e.m. con cerrojos ReentrantLock y guardarlo en emrl.java. Escribir una clase que lo use. Descargue otra vez nuestra vieja clase Cuenta_Banca.java Decida que código debe ser sincronizado, y sincronícelo con cerrojos ReentrantLock. La nueva clase será Cuenta_Banca_RL.java Escriba un programa multihebrado que use objetos de la clase anterior.llámelo Usa_Cuenta_Banca_Sync.java Proporciona variables de condición Se usa asociada a un cerrojo: siendo cerrojo una instancia de la clase ReentrantLock, cerrojo.newcondition() retorna la variable. Operaciones: await(), signal(), signalall() Antonio Tomeu API Java para Concurrencia 23de Alto Nivel Antonio Tomeu API Java para Concurrencia 24de Alto Nivel 4

5 import java.util.concurrent.locks.*; class buffer_acotado final Lock cerrojo = new ReentrantLock(); //declara y crea un cerrojo final Condition nollena = cerrojo.newcondition(); //obtiene variables de condicion asociadas a cerrojo final Condition novacia = cerrojo.newcondition(); //para control de buffer lleno y vacio final Object[] items = new Object[100]; //array de objetos int putptr, takeptr, cont; //punteros de insercion y extracción public void put(object x) throws InterruptedException cerrojo.lock(); try while (cont == items.length) nollena.await(); //duerme a hilo productor si buffer lleno items[putptr] = x; if (++putptr == items.length) putptr = 0; ++cont; novacia.signal(); //despierta a hilo consumidor esperando presencia de datos en buffer finally cerrojo.unlock(); public Object take() throws InterruptedException cerrojo.lock(); try while (cont == 0) novacia.await(); //duerme a hilo consumidor si buffer vacio Object x = items[takeptr]; if (++takeptr == items.length) takeptr = 0; --cont; nollena.signal(); //despierta a hilo productor esperando presencia de huecos en buffer return x; finally cerrojo.unlock(); EJERCICIOS Descargue y compile la clase buffer_acotado.java Qué diferencias tiene con la clase Buffer.java? (carpeta código Tema5) Implemente ahora hilos productores y consumidores que usen el buffer acotado y láncelos. Llame a su código prod_con_condition.java Antonio Tomeu API Java para Concurrencia 25de Alto Nivel Antonio Tomeu API Java para Concurrencia 26de Alto Nivel Clases Contenedoras Sincronizadas Colas Sincronizadas A partir de Java 5 se incorporan versiones sincronizadas de las principales clases contenedoras Disponibles en java.util.concurrent Clases: ConcurrentHashMap, ConcurrentSkipLis tmap, ConcurrentSkipListSet, CopyOnW ritearraylist, y CopyOnWriteArraySet A partir de Java 5 se incorporan diferentes versiones de colas, todas ellas sincronizadas Disponibles en java.util.concurrent Clases: LinkedBlockingQueue, ArrayBlockingQu eue, SynchronousQueue, PriorityBlock ingqueue,y DelayQueue Antonio Tomeu API Java para Concurrencia 27de Alto Nivel Antonio Tomeu API Java para Concurrencia 28de Alto Nivel Caracterísicas Son seguras frente a hilos concurrentes Proporcionan notificación a hilos según cambia su contenido Son autosincronizadas. Pueden proveer sincronización (además de e.m.) por sí mismas Facilitan enormemente la programación de patrones de concurrencia como el P-S public class Productor implements Runnable LinkedBlockingQueue<Integer> data; Thread hilo; public Productor(LinkedBlockingQueue<Integer> l) this.data = l; hilo = new Thread (this); hilo.start(); try for(int x=0;;x++) data.put(new Integer(x)); //bloqueo de hilo si no hay hueco System.out.println("Insertando "+x); catch(interruptedexception e) Antonio Tomeu API Java para Concurrencia 29de Alto Nivel Antonio Tomeu API Java para Concurrencia 30de Alto Nivel 5

6 public class Consumidor implements Runnable LinkedBlockingQueue<Integer> data; Thread hilo; public Consumidor(LinkedBlockingQueue<Integer> l) this.data = l; hilo = new Thread (this); hilo.start(); try for(;;) //bloquea a hilo consumidor si no hay datos System.out.println("Extrayendo "+data.take().intvalue()); catch(interruptedexception e) EJERCICIOS Descargue (subcarpeta colecciones seguras) Productor.java, Consumidor.java y ProdConColaBloqueante.java Ejecute. Cómo explica el comportamiento observado? Modificaciones: Aumente el número de ranuras de la cola Active varios productores y un consumidor Active un productor y varios consumidores Antonio Tomeu API Java para Concurrencia 31de Alto Nivel Antonio Tomeu API Java para Concurrencia 32de Alto Nivel USO CORRECTO DE COLECCIONES Usamos colecciones a través de interfaces (usabilidad del código) Usar colecciones no sincronizadas no mejora mucho el rendimiento Problemas con esquema tipo productorconsumidor, use colas Minimice la sincronización explícita Si con una colección retarda sus algoritmos, distribuya los datos y use varias POOL DE HILOS (Thread Pools) Hipótesis: Se desea implantar un servidor web. Enfoques posibles: Implantación de hilo simple Implantación multihebrada Antonio Tomeu API Java para Concurrencia 33de Alto Nivel Antonio Tomeu API Java para Concurrencia 34de Alto Nivel class ServidorWebHiloUnico public static void main(string[] args) throws IOException ServerSocket socket = new ServerSocket(80); //aquí servidor escuchando puerto 80 PATRÓN DE SERVIDOR WEB DE HILO SIMPLE while (true) Socket connection = socket.accept(); procesarsolicitud(connection); PATRÓN DE SERVIDOR WEB MULTIHEBRADO class ServidorWebMultiHebrado public static void main(string[] args) throws IOException ServerSocket socket = new ServerSocket(80); //aquí servidor a la escucha en puerto 80 //un hilo por solicitud while (true) final Socket connection = socket.accept(); Runnable task = new Runnable() procesarsolicitud(connection); ; new Thread(task).start(); //while Antonio Tomeu API Java para Concurrencia 35de Alto Nivel Antonio Tomeu API Java para Concurrencia 36de Alto Nivel 6

7 COMPARATIVA Servidor de hilo simple es ineficiente (hay mucha latencia) Servidor multihebrado mejora la situación Procesa múltiples solicitudes concurrentemente Mejora el rendimiento general Pero no está exento de problemas: Consumo de recursos (al crear los hilos) Estabilidad (número de peticiones elevado) Alternativa: Utilizar un pool de hilos y un ejecutor. CONCEPTO DE THREAD POOL Un pool de hilos es un conjunto de hilos inactivos a la espera de trabajo Si el programa tienen una tarea que ejecutar, la pasa al pool, que asigna un hilo para ejecutarla Una vez acabada, el hilo vuelve a quedar a la espera de trabajo Antonio Tomeu API Java para Concurrencia 37de Alto Nivel Antonio Tomeu API Java para Concurrencia 38de Alto Nivel EL PATRÓN DE THREAD POOL Por qué usar un THREAD POOL? Crear un hilo es costoso (latencias). Creando un pool, creamos los hilos una vez y los reutilizamos varias. Permite un mejor diseño de programas, delegando la gestión del ciclo de vida de los hilos al pool Permite paralelizar las aplicaciones si se dispone de varios procesadores Antonio Tomeu El Lenguaje API Java para y la Concurrencia Programación 39 de Concurrente Alto Nivel Antonio Tomeu API Java para Concurrencia 40 de Alto Nivel La interfaz java.util.concurrent.executor La interfaz java.util.concurrent.executor Un ejecutor es un concepto genérico, modelado por esta interfaz Proporcionan un patrón de diseño para programas multihebrados, modelándolos como una serie de tareas. Abstracción de los hilos; se crea una tarea, y se pasa al ejecutor Java 5 proporciona dos clases de ejecutores (implementan la interfaz): Ejecutor de un Thread Pool Ejecutor de tareas programadas package java.util.concurrent; public interface Executor public void execute (Runnable tarea) Antonio Tomeu API Java para Concurrencia 41de Alto Nivel Antonio Tomeu API Java para Concurrencia 42de Alto Nivel 7

8 La Clase ThreadPoolExecutor Sirve para crear un pool de hilos Implementa a ExecutorService El constructor: public ThreadPoolExecutor (int corepoolsize, int maximumpoolsize, long keepalivetime, TimeUnit unit, BlockingQueue<Runnable> workqueue); public class Tarea implements Runnable int numtarea; public Tarea(int n) numtarea = n; for (int i=1; i<100; i++) System.out.println("Esta es la tarea numero: "+numtarea+ " imprimiendo "+i); Antonio Tomeu API Java para Concurrencia 43de Alto Nivel Antonio Tomeu API Java para Concurrencia 44de Alto Nivel public class pruebathreadpool public static void main(string[] args) int ntareas = Integer.parseInt(args[0]); int tampool = Integer.parseInt(args[1]); ThreadPoolExecutor mipool = new ThreadPoolExecutor( tampool, tampool, 60000L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>()); UN SERVIDOR DE SOCKETS CON POOL DE THREADS import java.net.*; import java.io.*; public class SocketWebServerThreadPool implements Runnable Socket enchufe; public SocketWebServerThreadPool(Socket s) enchufe = s; Tarea[] tareas = new Tarea [ntareas]; for (int i=0; i<ntareas; i++) tareas[i] = new Tarea(i); mipool.execute(tareas[i]); mipool.shutdown(); try BufferedReader entrada = new BufferedReader( new InputStreamReader(enchufe.getInputStream())); String datos = entrada.readline(); int j; int i = Integer.valueOf(datos).intValue(); for(j=1; j<=20; j++) System.out.println("Una tarea de servicio escribiendo el dato "+i); enchufe.close(); System.out.println("La tarea de servicio cierra su conexion..."); catch(exception e) System.out.println("Error..."); //run Antonio Tomeu API Java para Concurrencia 45de Alto Nivel Antonio Tomeu API Java para Concurrencia 46de Alto Nivel public static void main (String[] args) int i; int puerto = 2001; int ntareas = Integer.parseInt(args[0]); int tampool = Integer.parseInt(args[1]); ThreadPoolExecutor mipool = new ThreadPoolExecutor( tampool, tampool, 60000L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>()); try ServerSocket chuff = new ServerSocket(puerto, 3000); while (true) System.out.println("Esperando solicitud de conexion..."); Socket cable = chuff.accept(); System.out.println("Recibida solicitud de conexion..."); mipool.execute(new SocketWebServerThreadPool(cable)); //while catch (Exception e) System.out.println("Error en sockets..."); //main EJERCICIOS Descargar y compilar Tarea.java y pruebathreadpool.java Abrir el administrador de tareas Efectuar las siguientes pruebas: java pruebathreadpool n m Para n=200 y m creciente Implante ahora un protocolo productor-consumidor con un único buffer, y un pool de 8 tareas productoras y 6 consumidoras Antonio Tomeu API Java para Concurrencia 47de Alto Nivel Antonio Tomeu API Java para Concurrencia 48de Alto Nivel 8

TEMA 6: API Java para Concurrencia de Alto Nivel

TEMA 6: API Java para Concurrencia de Alto Nivel TEMA 6: API Java para Concurrencia de Alto Nivel CONTENIDO API Java 5 de Control de la Concurrencia Clases para Gestión de Variables Atómicas Clase java.concurrent.util.concurrent.semaphore Clase java.concurrent.util.concurrent.cyclicbarrier

Más detalles

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

Programación concurrente en Java. Breve introducción. Miguel Ángel LATRE Dept. de Informática e Ingeniería de Sistemas Programación concurrente en Java. Breve introducción Miguel Ángel LATRE Dept. de Informática e Ingeniería de Sistemas Concurrencia en Java Hilos de ejecución Clase Thread e interfaz Runnable Pausas Interrupciones

Más detalles

EXCLUSIÓN MUTUA ENTRE HILOS. TEMA 5: Control de la Concurrencia en Java (API Estándar) Sintaxis para Bloques de Código Sincronizado

EXCLUSIÓN MUTUA ENTRE HILOS. TEMA 5: Control de la Concurrencia en Java (API Estándar) Sintaxis para Bloques de Código Sincronizado TEMA 5: Control de la Concurrencia en Java (API Estándar) CONTENIDO Exclusión Mutua con código synchronized. Exclusión Mutua con métodos synchronized. Protocolos de Control de la Exclusión Mutua. Interbloqueos

Más detalles

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

MONITORES EN JAVA. Antonio Tomeu Control de la Concurrencia en Java: API Estándar MONITORES EN JAVA Un monitor es un objeto que implementa acceso bajo e.m. a todos sus métodos, y provee sincronización En Java, son objetos de una clase cuyos métodos públicos son todos synchronized Un

Más detalles

Otras formas de Sincronización en Java

Otras formas de Sincronización en Java 75-62 Técnicas de Programación Concurrentes II Lic. Ing. Osvaldo Clúa 2008 Facultad de Ingeniería Universidad de Buenos Aires Otras formas de Sincronización en Java java.util.concurrent Class Exchanger

Más detalles

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

TEMA 3: Creación y Control De Threads en Java TEMA 3: Creación y Control De Threads en Java CONTENIDO Revisión del Concepto de Hilo Técnicas de Creación de Hilos Ciclo de Vida. Control de Hilos Prioridades Hilos y Sistemas Operativos Ejecutores y

Más detalles

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

TEMA 5: Control de la Concurrencia en Java (API Estándar) TEMA 5: Control de la Concurrencia en Java (API Estándar) CONTENIDO Exclusión Mutua con código synchronized. Exclusión Mutua con métodos synchronized. Protocolos de Control de la Exclusión Mutua. Interbloqueos

Más detalles

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

Java y JVM: programación concurrente. Adolfo López Díaz Java y JVM: programación concurrente Adolfo López Díaz JVM Máquina virtual Ambiente de programación virtualizado Permite la ejecución de programas Java ejecutables multiplataforma Programación concurrente

Más detalles

Introducción a los Threads Java

Introducción a los Threads Java 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

Más detalles

dit Programación concurrente Sincronización condicional UPM

dit Programación concurrente Sincronización condicional UPM 20151028 dit UPM Programación concurrente Sincronización condicional Juan Antonio de la Puente Algunos derechos reservados. Este documento se distribuye bajo licencia Crea9ve Commons

Más detalles

Tema 6. Threads: programas multitarea

Tema 6. Threads: programas multitarea Tema 6. Threads: programas multitarea Procesos e hilos Creación de threads Ciclo de vida de un thread Sincronización Prioridades Grupos de threads Relación de métodos Ejemplo sincronización 1 Procesos

Más detalles

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

Examen parcial Convocatoria de junio de 2005 FUNDAMENTOS DE LA PROGRAMACIÓN EJERCICIO 1 (1.5 puntos) Diseñe un conjunto de casos de prueba adecuado para comprobar el funcionamiento de un método encargado de calcular la duración de una llamada telefónica. Entradas Hora de inicio

Más detalles

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

BENEMERITA UNIVERSIDAD AUTONOMA DE PUEBLA FACULTAD DE CIENCIAS DE LA COMPUTACIÓN LICENCIATURA EN CIENCIAS DE LA COMPUTACIÓN BENEMERITA UNIVERSIDAD AUTONOMA DE PUEBLA FACULTAD DE CIENCIAS DE LA COMPUTACIÓN LICENCIATURA EN CIENCIAS DE LA COMPUTACIÓN PROGRAMACIÓN CONCURRENTE Y PARALELA PRACTICA 8 MONITORES BASADOS EN SEMÁFOROS

Más detalles

Programación concurrente

Programación concurrente Programación concurrente Java y Servicios Web I Master en Ingeniería Matemática Manuel Montenegro Dpto. Sistemas Informáticos y Computación Desp. 467 (Mat) montenegro@fdi.ucm.es Programación concurrente

Más detalles

Lenguaje Java. Sesión 5: Hilos. Experto Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles

Lenguaje Java. Sesión 5: Hilos. Experto Universitario en Desarrollo de Aplicaciones para Dispositivos Móviles Lenguaje Java Sesión 5: Hilos Índice Creación de hilos y ciclo de vida Sincronización de hilos Bloques vigilados Interbloqueos Interfaz Lock Variables atómicas y colecciones Ejecutores y pools Java Hilos-2

Más detalles

Programación concurrente en Java

Programación concurrente en Java Diseño Y Aplicaciones de Sistemas Distribuidos Programación concurrente en Java Joan Vila DISCA / UPV Departament d Informàtica de Sistemes i Computadors Universitat Politècnica de València Threads en

Más detalles

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

Ejemplo. class SiNoThread extends Thread { private String SiNo; static int Contador = 0; public SiNoThread(String s) { super(); SiNo = s; } Qué son los threads? Todos los programadores conocen lo que es un proceso, la mayoría diría que es un programa en ejecución: tiene un principio, una secuencia de instrucciones y tiene un final. Un thread

Más detalles

UPM Concurrencia en Java

UPM Concurrencia en Java UPM Concurrencia en Java Juan Antonio de la Puente DIT/UPM Hebras (threads) Una hebra es un objeto de una subclase de java.lang.thread o una implementación de la interfaz Runnable El código que ejecuta

Más detalles

CAPÍTULO 3. PROCESOS VS. HILOS

CAPÍTULO 3. PROCESOS VS. HILOS CAPÍTULO 3. PROCESOS VS. HILOS 3.1 Primitivas de sincronización en Java Java no tiene semáforos como primitivas de sincronización. Sin embargo, proporciona otras primitivas diferentes con las cuales sí

Más detalles

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

Programación Concurrente y de Tiempo Real Guión de prácticas 4: Creación y control de Hilos en Java Programación Concurrente y de Tiempo Real Guión de prácticas 4: Creación y control de Hilos en Java Natalia Partera Jaime Alumna colaboradora de la asignatura Índice 1. Hilos y Concurrencia 2 2. Implementar

Más detalles

Primitivas de Sincronización

Primitivas de Sincronización Primitivas de Sincronización JUAN CARLOS CONDE RAMÍREZ DISTRIBUTED COMPUTING Introducción Todas las soluciones previas al problema de mutex fueron un desperdicio de algún modo: Si un proceso es incapaz

Más detalles

Threads LSUB. 30 de marzo de 2016 GSYC

Threads LSUB. 30 de marzo de 2016 GSYC Threads LSUB GSYC 30 de marzo de 2016 (cc) 2015 Laboratorio de Sistemas, Algunos derechos reservados. Este trabajo se entrega bajo la licencia Creative Commons Reconocimiento - NoComercial - SinObraDerivada

Más detalles

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

Multienhebrado en Java Un toque de sincronización Transporte en Java Ejemplo conjunto Java y multiprogramación sobre red Sistemas Distribuidos ITInformática (UVA) César Llamas Bello 2003 Índice Multienhebrado en Java Un toque de sincronización Transporte en Java Ejemplo conjunto 26/02/2003

Más detalles

2. Indica cuál de las siguientes afirmaciones es cierta:

2. Indica cuál de las siguientes afirmaciones es cierta: Nombre:. Indica cuál de las siguientes afirmaciones es cierta: El diseño de un programa procedural está guiado por la división en tareas a realizar, mientras que el diseño orientado a objetos está dirigido

Más detalles

UNIDAD III.- Programación Concurrente

UNIDAD III.- Programación Concurrente UNIDAD III.- Programación Concurrente Sincronización Todo thread tiene una prioridad. Un thread hereda su prioridad, cuyo valor está entre 1 y 10 La prioridad puede modificarse con los métodos: setpriority()

Más detalles

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

Programación Concurrente en Java: Threads. Ejemplos de programación concurrente. Luis Fernando Llana Díaz. 24 de abril de 2008 Departamento de Sistemas Informáticos y Computación Universidad Complutense de Madrid de abril de 00 Ejemplos de programación concurrente En un sistema operativo, diversos programas compiten por los recursos

Más detalles

Tema 12: Programación multihilo

Tema 12: Programación multihilo Tema 12: Programación multihilo Antonio J. Sierra Índice 1. Modelo de hilo en Java. 2. El hilo principal. 3. Creación de un hilo. 4. Creación de múltiples hilos. Prioridades. 5. Comunicación entre hilos.

Más detalles

Java Threads. Sistemas Distribuidos Rodrigo Santamaría

Java Threads. Sistemas Distribuidos Rodrigo Santamaría Java Threads Sistemas Distribuidos Rodrigo Santamaría Java Threads Hilos Sincronización Ejercicios FAQ 2 3 Hilos Un hilo (Thread) es un proceso en ejecución dentro de un programa java main Thread t t.start()

Más detalles

Sincronización por Colas en en Java

Sincronización por Colas en en Java 75-62 Técnicas de Programación Concurrentes II Lic. Ing. Osvaldo Clúa 2013 Facultad de Ingeniería Universidad de Buenos Aires Sincronización por Colas en en Java Interface Collection Una interface

Más detalles

Procesamiento paralelo con hilos de Java

Procesamiento paralelo con hilos de Java Procesamiento paralelo con hilos de Java Tabla de contenidos 1. Soporte para hilos en Java... 1 2. Creación y control de un hilo... 2 2.1. Métodos de creación de un hilo... 2 2.2. Control de hilos mediante

Más detalles

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

Threads o Hilos. Un thread en JAVA comienza como una instancia de java.lang.thread antes de convertirse en un hilo de ejecución. Threads o Hilos Los hilos son otra forma de crear la posibilidad de concurrencia de actividades; sin embargo, la gran diferencia es que los hilos comparten el código y el acceso a los datos. En cierta

Más detalles

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

Ejecución de hebras. En realidad, todas las aplicaciones escritas en Java son aplicaciones multihebra (recuerde el recolector de basura). Ejecución de hebras En realidad, todas las aplicaciones escritas en Java son aplicaciones multihebra (recuerde el recolector de basura). Hebras vs. Procesos Los cambios de contexto son más costosos en

Más detalles

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

Hilos. Índice. Copyright 2012-13 Dept. Ciencia de la Computación e IA All rights reserved. Índice 1 Creación de hilos... 2 2 Ciclo de vida y prioridades...3 2.1 Prioridades de los hilos... 4 2.2 Interrupción de un hilo...4 3 Sincronización de hilos... 5 3.1 Sincronización reentrante...6 4 Bloques

Más detalles

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

PROGRAMACIÓN EN JAVA. { una línea para definir, crear o ejecutar ; } PROGRAMACIÓN EN JAVA { una línea para definir, crear o ejecutar ; } JFC Y API SPECIFICATIONS OBJECT INTERFACE ABSTRACT IMPLEMENTS EXTENDS NEW EXTENDS (Hasta que una clase derivada deje de ser ABSTRACT)

Más detalles

Concurrencia Monitores. Guillermo Román Díez

Concurrencia Monitores. Guillermo Román Díez Concurrencia Monitores Guillermo Román Díez groman@fi.upm.es Universidad Politécnica de Madrid Curso 2016-2017 Guillermo Román, UPM CC: Monitores 1/25 Recursos Compartidos Pregunta La especificación de

Más detalles

Prueba objetiva 2 - Clave a

Prueba objetiva 2 - Clave a Apellidos: Nombre: Matrícula: Normas Prueba objetiva 2 - Clave a Concurrencia 2010-2011 - Primer semestre Lenguajes, Sistemas Informáticos e Ingeniería de Software Este es un cuestionario que consta de

Más detalles

ELO330: Programación de Sistemas: Certamen Final 8/11/2006 Certamen Final 100 minutos. Puede usar Apuntes. Todas las preguntas tienen igual puntaje.

ELO330: Programación de Sistemas: Certamen Final 8/11/2006 Certamen Final 100 minutos. Puede usar Apuntes. Todas las preguntas tienen igual puntaje. Certamen Final 100 minutos. Puede usar Apuntes. Todas las preguntas tienen igual puntaje. 1.- Para el programa listado al final, qué valor se obtiene por pantalla cuando es ejecutado, en los siguientes

Más detalles

PROGRAMACION CONCURRENTE

PROGRAMACION CONCURRENTE PROGRAMACION CONCURRENTE Ejemplos III: Sopa de Letras 1 Objetivo Mostrar las diferentes estrategias que puede seguir un gestor que tiene que ejecutar una tarea compleja que puede ser paralelizada en diferentes

Más detalles

Concurrencia en Android LSUB, GYSC, URJC

Concurrencia en Android LSUB, GYSC, URJC Concurrencia en Android LSUB, GYSC, URJC Repaso de concurrencia en Java Crear un thread Instanciar un Thread, con el método run sobreescrito Intanciar un objeto que cumpla el interfaz Runnable y pasárselo

Más detalles

Arquitecturas cliente/servidor

Arquitecturas cliente/servidor Arquitecturas cliente/servidor Creación de Sockets Cliente Servidor 1 Creación de Sockets Cliente/Servidor Sockets en TCP Concepto de Hilos Definición de DAEMON Sockets en UDP 2 THREADS 3 Qué es un thread?

Más detalles

Tema III. Multihilo. Desarrollo de Aplicaciones para Internet Curso 12 13

Tema III. Multihilo. Desarrollo de Aplicaciones para Internet Curso 12 13 Tema III. Multihilo Desarrollo de Aplicaciones para Internet Curso 12 13 Índice 1.Introducción 2.Tipos de Concurrencia 3.Hilos en Java 4.Implementación de un SNB i. Sin Hilos ii. Con Hilos iii.con Pool

Más detalles

Programación concurrente y semáforos en Java

Programación concurrente y semáforos en Java Programación concurrente y semáforos en Java En Java es posible ejecutar tareas en paralelo, utilizando hebras de control (hilos, threads). Este modo de programación permite tener un espacio de memoria,

Más detalles

UNIVERSIDAD CARLOS III DE MADRID DEPARTAMENTO DE INGENIERÍA TELEMÁTICA. Daniel Díaz Sánchez

UNIVERSIDAD CARLOS III DE MADRID DEPARTAMENTO DE INGENIERÍA TELEMÁTICA. Daniel Díaz Sánchez UNIVERSIDAD CARLOS III DE MADRID DEPARTAMENTO DE INGENIERÍA TELEMÁTICA Sockets para servidor Daniel Díaz Sánchez Florina Almenárez Andrés Marín Departamento de Ingeniería Telemática Universidad Carlos

Más detalles

Guillermo Román Díez

Guillermo Román Díez Concurrencia Creación de Procesos en Java Guillermo Román Díez groman@fi.upm.es Universidad Politécnica de Madrid Curso 2016-2017 Guillermo Román, UPM CC: Creación de Procesos en Java 1/18 Concurrencia

Más detalles

Práctica #5: Uso de control de flujo, Excepciones y Lectura Estándar

Práctica #5: Uso de control de flujo, Excepciones y Lectura Estándar Práctica #5: Uso de control de flujo, Excepciones y Lectura Estándar Introducción El alumno creará cuatro programas en java que manejen control de flujo mediante las sentencias de bucle while y do/while,

Más detalles

Programación Concurrente en Java

Programación Concurrente en Java Hebras y monitores Departamento de Sistemas Informáticos y Programación Universidad Complutense de Madrid 21 de marzo de 2006 Threads Extendiendo la clase java.lang.thread. public class PrThread extends

Más detalles

Colas. 5.1 Implementación

Colas. 5.1 Implementación Capítulo 5 Colas Las colas al igual que las pilas son un tipo especial de listas en las cuales los elementos se insertan por un lado y se eliminan por el otro. Es decir se sacan en el mismo orden en que

Más detalles

Objetivos. El alumno empleará el concepto de excepción en la programación orientada a objetos para el manejo de errores de ejecución.

Objetivos. El alumno empleará el concepto de excepción en la programación orientada a objetos para el manejo de errores de ejecución. Universidad Nacional Autónoma de México Facultad de Ingeniería PRACTICA 10 PROGRAMACIÓN ORIENTADA A OBJETOS (MANEJO DE EXCEPCIONES) Objetivos El alumno empleará el concepto de excepción en la programación

Más detalles

Revisión del Concepto de Hilo (Thread) API Java parathreads: Marco General. Clase Thread: API Básica. TEMA 3: Creación y Control De Threads en Java

Revisión del Concepto de Hilo (Thread) API Java parathreads: Marco General. Clase Thread: API Básica. TEMA 3: Creación y Control De Threads en Java TEMA : Creación y Control De Threads en Java CONTENIDO Revisión del Concepto de Hilo Técnicas de Creación de Hilos Ciclo de Vida. Control de Hilos Prioridades Hilos y Sistemas Operativos BIBLIOGRAFÍA RECOMENDADA:

Más detalles

INGENIERÍA DE PROTOCOLOS DE COMUNICACIONES (MÓDULO 2)

INGENIERÍA DE PROTOCOLOS DE COMUNICACIONES (MÓDULO 2) INGENIERÍA F. I. M. DE PROTOCOLOS DE COMUNICACIONES - IMPLEMENTACIÓN DE PROTOCOLOS F. I. M. L.S.I.I.S L.S.I.I.S INGENIERÍA DE PROTOCOLOS DE COMUNICACIONES (MÓDULO 2) http://www.personal.fi.upm.es/~lmengual/inicio_ip.html

Más detalles

Introducción a Java LSUB. 30 de enero de 2013 GSYC

Introducción a Java LSUB. 30 de enero de 2013 GSYC Introducción a Java LSUB GSYC 30 de enero de 2013 (cc) 2013 Laboratorio de Sistemas, Algunos derechos reservados. Este trabajo se entrega bajo la licencia Creative Commons Reconocimiento - NoComercial

Más detalles

Natalia Partera Jaime Alumna colaboradora de la asignatura

Natalia Partera Jaime Alumna colaboradora de la asignatura Programación Concurrente y de Tiempo Real Guión de prácticas 6: Programación en Java de algoritmos de control de la Exclusión Mutua con variables comunes Natalia Partera Jaime Alumna colaboradora de la

Más detalles

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

PROGRAMACIÓN ORIENTADA A OBJETOS 1/7/2009. Examen de Java. Nombre: DNI: Titulación: Examen de Java Nombre: DNI: Titulación: 1. Sea una aplicación Java donde todas las clases están compiladas y empaquetas en un solo fichero JAR (programa.jar). Qué sería necesario para conseguir ejecutar

Más detalles

Acceso coordinado a recursos compartidos

Acceso coordinado a recursos compartidos Programación Concurrente en Linux Acceso coordinado a recursos compartidos Alberto Lafuente, Dep. KAT/ATC de la UPV/EHU, bajo Licencia Creative Commons 1 Contenido 1. Recursos compartidos 2. Mecanismos

Más detalles

Laboratorio I Java Threads (Silberschatz Galvin)

Laboratorio I Java Threads (Silberschatz Galvin) Laboratorio I Java Threads (Silberschatz Galvin) Un proceso es un programa ejecutandose dentro de su propio espacio de direcciones. Java es un sistema multiproceso, esto significa que soporta varios procesos

Más detalles

Sistemas operativos: una visión aplicada. Capítulo 5 Comunicación y sincronización de procesos

Sistemas operativos: una visión aplicada. Capítulo 5 Comunicación y sincronización de procesos Sistemas operativos: una visión aplicada Capítulo 5 Comunicación y sincronización de procesos Sistema multiprogramado con un una CPU Proceso A Proceso B Proceso C Tiempo Sistemas operativos: una visión

Más detalles

Programación Orientada a Eventos

Programación Orientada a Eventos Programación Orientada a Eventos Técnicas de Programación Santiago Pavón V:2012.03.13 Programas Secuénciales El flujo de ejecución del programa sigue la secuencia de sentencias que lo forman. El estado

Más detalles

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

PROGRAMACIÓN ORIENTADA A OBJETOS 10/02/2009. Examen de Java. Nombre: DNI: Titulación: Examen de Java Nombre: DNI: Titulación: 1. Cómo podemos compilar desde la línea de comandos la clase Java A que utiliza una librería empaquetada bd.jar? 2. Indica si es correcto el siguiente código. Justifica

Más detalles

Programación Concurrente en Java: Threads

Programación Concurrente en Java: Threads Departamento de Sistemas Informáticos y Computación Universidad Complutense de Madrid 7 de mayo de 007 Ejemplos de programación concurrente En un sistema operativo, diversos programas compiten por los

Más detalles

Unidad IV: Programación concurrente (MultiHilos) 4.1. Concepto de hilo

Unidad IV: Programación concurrente (MultiHilos) 4.1. Concepto de hilo Unidad IV: Programación concurrente (MultiHilos) 4.1. Concepto de hilo Hilo (theread) llamado también proceso ligero o subproceso, es la unidad de ejecución de un proceso y esta asociado con una secuencia

Más detalles

Programación concurrente Hebras

Programación concurrente Hebras 20151021 dit UPM Programación concurrente Hebras Juan Antonio de la Puente Algunos derechos reservados. Este documento se distribuye bajo licencia Crea9ve Commons Reconocimiento-NoComercial-Compar9rIgual

Más detalles

TECNICAS DE PROGRAMACION Universidad Católica Los Angeles de Chimbote MODIFICADORES DE ACCESO A LOS MIEMBROS DE UNA CLASE

TECNICAS DE PROGRAMACION Universidad Católica Los Angeles de Chimbote MODIFICADORES DE ACCESO A LOS MIEMBROS DE UNA CLASE MODIFICADORES DE ACCESO A LOS MIEMBROS DE UNA CLASE Los modificadores de acceso, como su nombre indica, determinan desde qué clases se puede acceder a un determinado elemento. En Java tenemos 4 tipos:

Más detalles

Examen Teórico Convocatoria de Junio de 2012

Examen Teórico Convocatoria de Junio de 2012 Examen Teórico Convocatoria de Junio de 2012 Nombre: DNI: Titulación: 1. Sobre el control de errores en Java: a) El siguiente método contiene un error de compilación debido al uso de excepciones. Explica

Más detalles

Universidad Autónoma de Baja California Facultad de Ingeniería Apuntes de Programación Orientada a Objetos I

Universidad Autónoma de Baja California Facultad de Ingeniería Apuntes de Programación Orientada a Objetos I Hilos Universidad Autónoma de Baja California Hasta el momento los programas que se han estado manejando en el curso han sido secuenciales. Esto es, inician en un punto y continuan su ejecución de manera

Más detalles

El servicio de echo con sockets

El servicio de echo con sockets PRÁCTICA 2 El servicio de echo con sockets E l objetivo de esta práctica es crear y ejecutar una aplicación cliente servidor "echo" basada en sockets TCP pero estructurándola según el modelo de objetos

Más detalles

Sockets. Los sockets son un mecanismo de comunicación entre procesos que se utiliza en Internet.

Sockets. Los sockets son un mecanismo de comunicación entre procesos que se utiliza en Internet. Sockets La biblioteca estándar de clases de Java nos proporciona todo lo que necesitamos para utilizar sockets en nuestras aplicaciones en el paquete java.net, por lo que tendremos que añadir la siguiente

Más detalles

STRINGBUFFER, STRINGBUILDER JAVA. EJEMPLO. DIFERENCIAS ENTRE CLASES. CRITERIOS PARA ELEGIR. MÉTODOS. (CU00914C)

STRINGBUFFER, STRINGBUILDER JAVA. EJEMPLO. DIFERENCIAS ENTRE CLASES. CRITERIOS PARA ELEGIR. MÉTODOS. (CU00914C) APRENDERAPROGRAMAR.COM STRINGBUFFER, STRINGBUILDER JAVA. EJEMPLO. DIFERENCIAS ENTRE CLASES. CRITERIOS PARA ELEGIR. MÉTODOS. (CU00914C) Sección: Cursos Categoría: Lenguaje de programación Java nivel avanzado

Más detalles

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

PROGRAMACION CONCURRENTE Y DISTRIBUIDA. IV.1 Executor framework: Threads pool PROGRAMACION CONCURRENTE Y DISTRIBUIDA IV.1 Executor framework: Threads pool J.M.Drake L.Barros 1 Tareas y Threads Existen dos modelo básicos de programas concurrentes: Un programa resulta de la actividad

Más detalles

Hebras y Sincronización en Java

Hebras y Sincronización en Java Hebras y Sincronización en Java Jonathan Makuc http://jmakuc.ublog.cl Noviembre 2008 Tópicos: 1. Introducción a hebras en Java...2 2. Hebras a través del clase Thread...3 3. Hebras a través de la interfaz

Más detalles

Programación Concurrente y Distribuída Estado Compartido, 2010

Programación Concurrente y Distribuída Estado Compartido, 2010 Programación Concurrente y Distribuída Estado Compartido, 2010 Camilo Rueda 1 1 Universidad Javeriana-Cali 9 de abril de 2010 Concurrencia con estado: introducción problema: modelar con puertos un objeto

Más detalles

Código Fuente. Creamos en C:\ una carpeta para ubicar el código fuente del servidor. En mi caso, he creado una carpeta denominada rmi4

Código Fuente. Creamos en C:\ una carpeta para ubicar el código fuente del servidor. En mi caso, he creado una carpeta denominada rmi4 EL EJEMPLO El proceso servidor provoca un eco de la entrada de teclado enviada por el proceso cliente. Por sencillez, ejecutaremos tanto el servidor como el cliente en la máquina local. El sistema operativo

Más detalles

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

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas 2 - Introducción al lenguaje Java, identificadores y comentarios. Carlos Montenegro Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas 1. Introducción: Java tiene como todos

Más detalles

Por ejemplo, el siguiente error conduce inmediatamente a un deadlock:

Por ejemplo, el siguiente error conduce inmediatamente a un deadlock: Monitores Los semáforos, son el equivalente a las instrucciones goto y el manejo de apuntadores en los lenguajes de programación imperativos: son muy susceptibles a errores. Su utilización exige disciplina.

Más detalles

Estructuras de control selectivas

Estructuras de control selectivas Práctica 3 Estructuras de control selectivas Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión 2.0.2 Concepto de sentencia y estructura de control El cuerpo de los métodos

Más detalles

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

dit UPM Tema 2: Concurrencia /threads (java) Análisis y diseño de software José A. Mañas Análisis y diseño de software dit UPM Tema 2: Concurrencia /threads (java) José A. Mañas 11.3.2018 referencias The Java tutorials: Concurrency Oracle Java Threads Scott Oaks & Henry Wong O'Reilly Media;

Más detalles

Unidad 1: Gestión de Procesos

Unidad 1: Gestión de Procesos Unidad 1: Gestión de Procesos Tema 1, Concurrencia: Exclusión mutua y sincronización. 1.1 Problema de la sección crítica, alternativas al uso de semáforos: - Regiones críticas, Monitores, Variables de

Más detalles

Benemérita Universidad Autónoma del Estado de Puebla

Benemérita Universidad Autónoma del Estado de Puebla Benemérita Universidad Autónoma del Estado de Puebla Facultad de Cs. De la Computación Programación Concurrente y Paralela Práctica de Laboratorio No. 4 Profr: María del Carmen Cerón Garnica Alumno: Roberto

Más detalles

Qué es Java? Un lenguaje de programación Un entorno de desarrollo Un entorno de aplicación Un entorno de despliegue Es similar en sintaxis de C + +.

Qué es Java? Un lenguaje de programación Un entorno de desarrollo Un entorno de aplicación Un entorno de despliegue Es similar en sintaxis de C + +. APUNTES DE JAVA Agenda Bienvenida Conociendo Java La Maquina Virtual Descargar e instalar el compilador El entorno de trabajo El paradigma de la programación orientada a objetos Qué es Java? Un lenguaje

Más detalles

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

Java RMI Remote Method Invocation. Invocación Remota de Métodos en Java Java RMI Remote Method Invocation Invocación Remota de Métodos en Java Contenido Introducción Implementación Diseño de la interfaz remota. Implementación de la interfaz remota. Obtención de las clases

Más detalles

PROGRAMACION CONCURRENTE Y DISTRIBUIDA. III.4 Concurrencia con Java: Sincronización explícita

PROGRAMACION CONCURRENTE Y DISTRIBUIDA. III.4 Concurrencia con Java: Sincronización explícita PROGRAMACION CONCURRENTE Y DISTRIBUIDA III.4 Concurrencia con Java: Sincronización explícita J.M. Drake 1 Locks explícitos En Java 5.0, se introdujo un mecanismo de sincronización alternativo al lock intrínseco

Más detalles

Normalmente, los programas son ejecutados de forma secuencial. Único flujo de control

Normalmente, los programas son ejecutados de forma secuencial. Único flujo de control Hilos BUAP Introducción Normalmente, los programas son ejecutados de forma secuencial Único flujo de control Un programa con un único flujo de control, ejecuta sólo una tarea (hilo) Dr. Ivan Olmos 2 Introducción

Más detalles

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

BENEMERITA UNIVERSIDADD AUTONOMA DE PUEBLA FACULTAD DE CIENCIAS DE LA COMPUTACIÓN LICENCIATURA EN CIENCIAS DE LA COMPUTACIÓN BENEMERITA UNIVERSIDADD AUTONOMA DE PUEBLA FACULTAD DE CIENCIAS DE LA COMPUTACIÓN LICENCIATURA EN CIENCIAS DE LA COMPUTACIÓN PROGRAMACION CONCURRENTE PARALELA Y PRACTICA 3 (PARTE 1 Y 2) HILOS POSIX NOMBRE:

Más detalles

INDICE Prologo 1 Recorrido rápido de java 2 Clases y objetos 3 Extensión de clases

INDICE Prologo 1 Recorrido rápido de java 2 Clases y objetos 3 Extensión de clases INDICE Prologo XIII 1 Recorrido rápido de java 1.1. Para empezar 1 1.2. Variables 2 1.3. Comentarios en el condigo 1.4. Constantes con nombre 5 1.4.1. Caracteres Unicode 6 1.5. Flujo de control 7 1.6.

Más detalles

MECANISMOS DE SINCRONIZACIÓN PROGRAMACIÓN CONCURRENTE Y PARALELA

MECANISMOS DE SINCRONIZACIÓN PROGRAMACIÓN CONCURRENTE Y PARALELA MECANISMOS DE SINCRONIZACIÓN PROGRAMACIÓN CONCURRENTE Y PARALELA Sincronización El problema de la sincronización de hilos tiene lugar cuando varios hilos intentan acceder al mismo recurso o dato. A la

Más detalles

CURSO : ESTRUCTURA DE DATOS DOCENTE : ING. JUAN ZEVALLOS VALLE

CURSO : ESTRUCTURA DE DATOS DOCENTE : ING. JUAN ZEVALLOS VALLE CURSO : ESTRUCTURA DE DATOS DOCENTE : ING. JUAN ZEVALLOS VALLE 1 Estructura de Datos 1. Logica de Programación 2. Uso de Algoritmos usando Lenguaje Java 3. Ingreso de datos 4. Sentencias de Control 1.

Más detalles

Monitores Ing. Iván Medrano Valencia

Monitores Ing. Iván Medrano Valencia Universidad Nacional de San Antonio Abad del Cusco Departamento Académico de Informática Programación Concurrente y Distribuida Práctica 5 1. OBJETIVO. Ing. Iván Medrano Valencia En esta práctica, comprobaremos

Más detalles

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

Unidad Didáctica 3. Tipos genéricos. Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 3 Tipos genéricos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Definición de tipo genérico Hablamos de un tipo genérico cuando el tipo en cuestión depende

Más detalles

CAPÍTULO III: Programación Concurrente en JAVA I: Programación con hilos

CAPÍTULO III: Programación Concurrente en JAVA I: Programación con hilos CAPÍTULO III: Programación Concurrente en JAVA I: Programación con hilos III. PROGRAMACION CON HILOS (THREADS) EN JAVA Java contiene una serie de clases y construcciones específicas para programar de forma

Más detalles

06/06/2017. Hay varios niveles para expresar concurrencia: Nivel de Instrucción Nivel de Sentencia Nivel de Unidad Nivel de Programa

06/06/2017. Hay varios niveles para expresar concurrencia: Nivel de Instrucción Nivel de Sentencia Nivel de Unidad Nivel de Programa 1 Hay varios niveles para expresar concurrencia: Nivel de Instrucción Nivel de Sentencia Nivel de Unidad Nivel de Programa 2 Hay varios niveles para expresar concurrencia: Nivel de Instrucción Nivel de

Más detalles

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

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones Unidad Didáctica 2 Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión 1.0.3 Índice

Más detalles

Java: Programación Multithread

Java: Programación Multithread Qué es un thread? Java: Programación Multithread Hasta el momento hemos desarrollado programas secuenciales con un único thread: en cualquier instante durante la ejecución de un programa hay un único punto

Más detalles

HOJA DE EJERCICIOS 5 PROGRAMACIÓN CON EXCEPCIONES EN JAVA

HOJA DE EJERCICIOS 5 PROGRAMACIÓN CON EXCEPCIONES EN JAVA Estructura de la Información en Programación I.T.I.G., Matemáticas. Curso 2008/2009 Nombre:... Fecha: / 01 / 2009 HOJA DE EJERCICIOS 5 PROGRAMACIÓN CON EXCEPCIONES EN JAVA Esta hoja de ejercicios nos servirá

Más detalles

Concurrencia. Primitivas IPC con bloqueo

Concurrencia. Primitivas IPC con bloqueo Concurrencia Primitivas IPC con bloqueo Primitivas de IPC con bloqueo La solución de Peterson es correcta, pero tiene el defecto de requerir espera ocupada: Cuando un proceso quiere entrar en su región

Más detalles

CURSO DE PROGRAMACIÓN EN JAVA J2EE 7 ÍNDICE

CURSO DE PROGRAMACIÓN EN JAVA J2EE 7 ÍNDICE CURSO DE PROGRAMACIÓN EN JAVA J2EE 7 ÍNDICE PRÓLOGO... 13 APECTOS BÁSICOS DE JAVA... 15 1.1. LA MÁQUINA VIRTUAL JAVA... 15 1.2. EDICIONES JAVA... 16 1.3. ESTRUCTURA DE UN PROGRAMA JAVA... 16 1.4. EL MÉTODO

Más detalles

Programación Concurrente con Java

Programación Concurrente con Java Programación Concurrente con Java Diseño de Sistemas Operativos Facultad de Informática Juan Pavón Mestras Dep. Sistemas Informáticos y Programación Universidad Complutense Madrid Concurrencia En el mundo

Más detalles

Programación Java. Introducción a Archivos de datos de Entrada

Programación Java. Introducción a Archivos de datos de Entrada Programación Java Introducción a Archivos de datos de Entrada Consideremos el siguiente algoritmo: Algoritmo (no modular) para determinar y mostrar el promedio aritmético (media aritmética) de los elementos

Más detalles

PROGRAMACIÓN EN JAVA

PROGRAMACIÓN EN JAVA SISTEMAS INFORMÁTICOS INDUSTRIALES curso 2007-2008 PROGRAMACIÓN EN JAVA PRÁCTICA 3: Comunicación entre tareas. Modelo productor / consumidor. Objetivos Implementar una aplicación en Java en la que existan

Más detalles