Tema 12: Programación multihilo

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

Download "Tema 12: Programación multihilo"

Transcripción

1 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. Sincronización. 6. Modelado UML para la programación multihilo. Clases activas. 1

2 Introducción Un programa multihilo contiene dos o más partes que pueden ejecutarse de forma concurrente. Cada parte de ese programa se llama hilo (Thread) y cada hilo establece un camino de ejecución independiente. La concurrencia reúne varios hilos de ejecución. Forma especializada de multitarea (multitasking). basada en procesos basada en hilos Multitarea basada en Procesos Proceso es un programa que se está ejecutando. Multitarea basada en procesos se puede decir que es la característica que le permite a la computadora ejecutar dos o más programas concurrentemente. Un programa es la unidad de código más pequeña que el planificador puede seleccionar. Los procesos son tareas pesadas que necesitan su propio espacio de direccionamiento. La comunicación entre procesos es más cara y limitada. Es costoso el cambio de contexto de un proceso a otro. 2

3 Multitarea basada en hilos El hilo es la unidad de código más pequeña que se puede seleccionar. La multitarea basada en hilos requiere menos sobrecarga que la multitarea basada en procesos. Los hilos son más ligeros, ya que comparten el mismo espacio de direcciones y comparten cooperativamente el mismo proceso pesado. La comunicación entre hilos es ligera y el cambio de contexto de un hilo al siguiente es menos costoso. El modelo de hilo en Java Java utiliza hilos para permitir que el entorno en su globalidad sea asíncrono. 3

4 Estados de los hilos Un hilo puede estar ejecutándose. Puede estar preparado para ejecutarse tan pronto como disponga de tiempo de CPU. Si se está ejecutando puede suspenderse, lo que equivale a detener temporalmente su actividad. El hilo suspendido puede reanudarse permitiendo que continúe su tarea allí donde la dejó. Un hilo puede estar bloqueado cuando espera un recurso. Un hilo puede detenerse, finalizando su ejecución de manera inmediata. Una vez detenido, un hilo no puede reanudarse. El ciclo de vida de un Thread En ejecución start yield Nuevo Hilo Ejecución Suspendido Detenido El método run termina 4

5 Prioridades de los hilos El intérprete de Java utiliza prioridades para determinar cómo debe tratar cada hilo con respecto a los demás. La prioridad de un hilo es un valor entero que asigna un orden de ejecución cuando los hilos estén preparados para ejecutarse o ejecutándose La prioridad de un hilo se utiliza para decidir cuándo se pasa a ejecutar otro hilo. Esto es lo que se conoce como cambio de contexto. Reglas para el cambio de contexto Un hilo puede ceder voluntariamente el control. Esto se hace por abandono explícito, al quedarse dormido o al bloquearse en espera de una E/S pendiente. En este caso, se examinan todos los hilos restantes y se selecciona para su asignación a la CPU aquél que, estando listo para su ejecución, tenga la prioridad más alta. Un hilo puede ser desalojado por otro con prioridad más alta. En este caso, un hilo de baja prioridad que no libera la CPU es desalojado por otro de mayor prioridad con independencia de lo que estuviese haciendo en ese instante. 5

6 Sincronización (I) Los hilos permiten y potencian el comportamiento asíncrono de los programas, forma de forzar el sincronismo donde sea necesario Haciendo que coincidan en el tiempo dos o más hilos de ejecución Java implementa una versión de modelo clásico de sincronización entre procesos, llamado monitor. El monitor es un mecanismo de control que fue definido en primer lugar por C.A.R. Hoare y que puede entenderse como una pequeña caja en la que sólo cabe un hilo. Una vez que un hilo entra en el monitor, los demás deben esperar a que éste salga. Los monitores se utilizan para proteger un bien compartido y evitar que sea manipulado por más de un hilo simultáneamente. Sincronización (II) Cada objeto tiene su propio monitor implícito en el que entra automáticamente cuando se llama a uno de los métodos sincronizados del objeto. Una vez que un hilo está dentro de un método sincronizado, ningún otro hilo puede llamar a otro método sincronizado del mismo objeto. 6

7 El hilo principal class HiloActual { public static void main (String args[]) { Thread t = Thread.currentThread(); System.out.println("Hilo actual: " +t); //cambia el nombre del hilo t.setname("mi hilo"); System.out.println("después del cambio de nombre: " +t); try { for (int n = 5; n>0 ; n--) { System.out.println(n); Thread.sleep(1000); catch (InterruptedException e){ System.out.println("Interrupcion del hilo principal"); Hilo actual: Thread[main,5,main] después del cambio de nombre: Thread[Mi hilo,5,main] Creación de un hilo Dos opciones: Implementando la interfaz Runnable. Extendiendo la clase Thread. La clase Thread define varios métodos que pueden sobrescribir las clases derivadas. El único que tiene que ser sobrescrito es run(). Este método es exactamente el mismo que es necesario para implementar la interfaz Runnable. Implementar la interfaz permite utilizar herencia de cualquier otra clase diferente. 7

8 Implementando la interfaz Runnable Si un objeto implementa la interfaz Runnable se puede usar para crear un hilo. El comienzo del hilo (con start()) provoca que el método run() del hilo se pueda invocar de forma separada. Thread(Runnable objetohilo, String nombrehilo) synchronized void start() public abstract void run() Ejemplo con Runnable (I) //Crea un segundo hilo. class NuevoHilo implements Runnable { Thread t; NuevoHilo() { //Crea un nuevo hilo t = new Thread(this,"Hilo hijo"); System.out.println("Hilo hijo: "+t); t.start(); //comienza el hilo //Este es el punto de entrada del segundo hilo public void run() { try { for (int i = 5; i > 0; i--){ System.out.println("Hilo hijo: " +i); Thread.sleep(500); catch(interruptedexception e) { System.out.println("Interrupcion de hilo hijo"); System.out.println("Sale del hilo hijo"); 8

9 Ejemplo con Runnable (II) class Hilos0 { public static void main(string args[]){ new NuevoHilo(); //crea un nuevo hilo try{ for (int i = 5; i>0 ; i--){ System.out.println("Hilo Principal: " +i); Thread.sleep(1000); catch(interruptedexception e) { System.out.println("Interrupcion del hilo principal"); System.out.println("Sale del hilo principal."); Extendiendo la clase Thread Crea una nueva clase que herede de la clase Thread y después crear una instancia de esa clase. Esta nueva clase debe sobreescribir el método run(), que es el punto de entrada del nuevo hilo. También debe llamar al método start() para que comience la ejecución del nuevo hilo. 9

10 Ejemplo con Thread (I) //Crea un hilo extendiendo la clase Thread. class NuevoHilo extends Thread { NuevoHilo() { //Crea un nuevo hilo super("hilo demo"); System.out.println("Hilo hijo: "+this); start(); //comienza el hilo //Este es el punto de entrada del segundo hilo public void run() { try { for (int i = 5; i > 0; i--){ System.out.println("Hilo hijo: " +i); Thread.sleep(500); catch(interruptedexception e) { System.out.println("Interrupcion de hilo hijo"); System.out.println("Sale del hilo hijo"); Ejemplo con Thread (II) class Hilos1 { public static void main(string args[]){ new NuevoHilo();//crea un nuevo hilo try{ for (int i = 5; i>0 ; i--){ System.out.println("Hilo Principal: " +i); Thread.sleep(1000); catch(interruptedexception e) { System.out.println("Interrupcion del hilo principal"); System.out.println("Sale del hilo principal."); 10

11 Creación de múltiples hilos Hasta ahora sólo se han utilizado dos hilos: el hilo principal y un hilo hijo. Se pueden generar tantos hilos como necesiten. Ejemplo, creación de varios hilos (I) //Creación de múltiples hilos class NuevoHilo implements Runnable { String nombre; Thread t; NuevoHilo(String NombreHilo) { //Crea un nuevo hilo nombre = NombreHilo; t = new Thread(this, nombre); System.out.println("Nuevo Hilo: " + t); t.start(); //comienza el hilo //Este es el punto de entrada del hilo public void run() { try { for (int i = 5; i > 0; i--){ System.out.println(nombre + ": " +i); Thread.sleep(1000); catch(interruptedexception e) { System.out.println("Interrupcion del hilo "+ nombre); System.out.println("Sale del hilo " + nombre); 11

12 Ejemplo creación de varios hilos (II) class Hilos2 { public static void main(string args[]){ new NuevoHilo("Uno"); new NuevoHilo("Dos"); new NuevoHilo("Tres"); try{ Thread.sleep(10000); catch(interruptedexception e) { System.out.println( "Interrupcion del hilo principal"); System.out.println( "Sale del hilo principal."); C:\jdk1.2.2\bin>java Hilos2 Nuevo Hilo: Thread[Uno,5,main] Nuevo Hilo: Thread[Dos,5,main] Nuevo Hilo: Thread[Tres,5,main] Uno: 5 Dos: 5 Tres: 5 Uno: 4 Dos: 4 Tres: 4 Uno: 3 Dos: 3 Tres: 3 Uno: 2 Dos: 2 Tres: 2 Uno: 1 Dos: 1 Tres: 1 Sale del hilo Uno Sale del hilo Dos Sale del hilo Tres Sale del hilo principal. Comunicación entre hilos Una forma de determinar si un hilo ha terminado de ejecutarse es llamando al método de la clase Thread isalive(): final boolean isalive() throws InterruptedException Devuelve true si el hilo al que se hace referencia está todavía ejecutándose. Devuelve false en caso contrario. El método join() se utiliza para esperar la finalización de un hilo. final void join() throws InterruptedException Este método espera hasta que finalice el hilo sobre el que se llama. Su nombre surge de la idea de que el hilo llamante espera hasta que el hilo especificado se reúne con él. Hay otras formas de join() que permiten especificar el tiempo máximo que se quiere esperar la finalización de un hilo. final void join(long millis) throws InterruptedException final void join(long millis, int nanos) throws InterruptedException 12

13 Ejemplo de Comunicación entre hilos (I) //Uso del método join() para esperar la finalización de hilos class NuevoHilo implements Runnable { String nombre; Thread t; NuevoHilo(String NombreHilo) { //Crea un nuevo hilo nombre = NombreHilo; t = new Thread(this, nombre); System.out.println("Nuevo Hilo: " + t); t.start(); //comienza el hilo //Este es el punto de entrada del hilo public void run() { try { for (int i = 5; i > 0; i--){ System.out.println(nombre + ": " +i); Thread.sleep(1000); catch(interruptedexception e) { System.out.println("Interrupcion del hilo "+ nombre); System.out.println("Sale del hilo " + nombre); Ejemplo de Comunicación entre hilos (II) class Hilos3{ public static void main(string args[]){ NuevoHilo ob1 = new NuevoHilo("Uno"); NuevoHilo ob2 = new NuevoHilo("Dos"); NuevoHilo ob3 = new NuevoHilo("Tres"); System.out.println("El hilo Uno está vivo: "+ob1.t.isalive()); System.out.println("El hilo Dos está vivo: "+ob2.t.isalive()); System.out.println("El hilo Tres está vivo: "+ob3.t.isalive()); //espera a que terminen los otros hilos try{ System.out.println("Espera finalización de otros hilos "); ob1.t.join(); ob2.t.join(); ob3.t.join(); catch(interruptedexception e) { System.out.println("Interrupcion del hilo principal"); System.out.println("El hilo Uno está vivo: "+ob1.t.isalive()); System.out.println("El hilo Dos está vivo: "+ob2.t.isalive()); System.out.println("El hilo Tres está vivo: "+ob3.t.isalive()); System.out.println("Sale del hilo principal "); La salida de este programa es la siguiente: C:\jdk1.2.2\bin>java Hilos3 Nuevo Hilo: Thread[Uno,5,main] Nuevo Hilo: Thread[Dos,5,main] Nuevo Hilo: Thread[Tres,5,main] El hilo Uno estß vivo: true El hilo Dos estß vivo: true El hilo Tres estß vivo: true Espera finalizaci_n de otros hilos Uno: 4 Dos: 4 Tres: 4 Uno: 3 Dos: 3 Tres: 3 Uno: 2 Dos: 2 Tres: 2 Uno: 1 Dos: 1 Tres: 1 Sale del hilo Uno Sale del hilo Dos Sale del hilo Tres El hilo Uno estß vivo: false El hilo Dos estß vivo: false El hilo Tres estß vivo: false Sale del hilo principal 13

14 Suspensión y Reanudación de un hilo Son dos métodos marcados como Deprecated : final void resume() final void suspend() La clase Object proporciona los siguientes métodos: void wait() void wait(long timeout) void wait(long timeout, int nanos) Provoca que el hilo actual espere hasta que otro hilo invoque a notify() o notifyall(). void notify () Despierta un solo hilo que estaba esparando en este monitor del objeto. void notifyall () Despierta todos los hilos que estaban esperando en este monitor del objeto. Prioridad El planificador de hilos utiliza las prioridades de los hilos para determinar cuándo debe permitir que se ejecute cada hilo. Si dos hilos están preparados para ejecutarse se ejecutará el de mayor prioridad. Prioridad es un valor entero (5 por defecto) comprendido entre Thread.MIN_PRIORITY y Thread.MAX_PRIORITY. Se puede gestionar mediante los métodos: final void setpriority(int nivel) final int getpriority () 14

15 Sincronización Cuando dos o más hilos necesitan acceder de manera simultánea a un recurso compartido, necesitan asegurarse de que sólo uno de ellos accede al mismo en un instante dado. El proceso mediante el cual se consigue esto se llama sincronización. Java proporciona un soporte único, a nivel de lenguaje, para la sincronización. Un monitor es un objeto que se utiliza como cerrojo exclusivo, o mutex (mutually exclusive, mutuamente exclusivo). Sólo uno de los hilos puede ser el propietario del monitor en un instante dado. Cuando un hilo adquiere un cerrojo, se dice que ha entrado en el monitor. Los restantes hilos que estuviesen intentando acceder al monitor bloqueado quedan en suspensión hasta que el primer hilo salga del monitor. Se dice que estos hilos están esperando al monitor. Un hilo que posea un monitor puede volver a acceder al mismo si así lo desea. La sincronización del código se puede realizar mediante la palabra clave synchronized (sincronizado). Ejemplo sin sincronización //Este programa no está sincronizado. class Llamada { void llama(string msg){ System.out.print("["+msg); try { Thread.sleep(1000); catch(interruptedexception e){ System.out.println("Interrumpido"); System.out.print("]"); class ElQueLlama implements Runnable { String msg; Llamada objetivo; Thread t; public ElQueLlama(Llamada objet, String s) { objetivo = objet; msg = s; t = new Thread(this); t.start(); public void run() { objetivo.llama(msg); class Sincro0{ public static void main(string[] args){ Llamada objetivo = new Llamada(); ElQueLlama ob1 = new ElQueLlama(objetivo, "Hola"); ElQueLlama ob2 = new ElQueLlama(objetivo, "Mundo"); ElQueLlama ob3 = new ElQueLlama(objetivo, "Sincronizado"); //Espera a que los hilos terminen try { ob1.t.join(); ob2.t.join(); ob3.t.join(); catch(interruptedexception e){ System.out.println("Interrumpido"); La salida producida por este programa. [Hola[Mundo[Sincronizado]]] 15

16 Con Sincronización class Llamada { synchronized void llama(string msg){ // Esto evitará que otros métodos puedan acceder a llama() mienta otro lo está utilizando. La salida [Hola] [Mundo] [Sincronizado] Otra forma es sincronizar un objeto en un conjunto de sentencias. synchronized (objeto){ //Sentencias que deben ir sincronizadas Modelado UML para la programación multihilo. Clases activas. Las clases activas son elementos estructurales de los bloques del construcción del modelo conceptual de UML. Una clase activa es una clase cuyos objetos tienen uno o más procesos o hilos que constituyen flujos de control independientes pero concurrentes con otros flujos de control (con los que muy probablemente se deberán sincronizar). Una clase activa es igual que una clase, excepto en que sus objetos representan elementos cuyo comportamiento es concurrente con otros elementos. 16

17 Modelado UML para la programación multihilo. Clases activas. GestorEventos supender() 17

1. Fundamentos. Existen dos tipos distintos de multitarea: BASADA EN PROCESOS

1. Fundamentos. Existen dos tipos distintos de multitarea: BASADA EN PROCESOS Hilos 1. Fundamentos. Los procesadores y los Sistemas Operativos modernos permiten la multitarea, es decir, la realización simultánea de dos o más actividades. En la realidad, un ordenador con una sola

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

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

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

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

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

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

Guillermo Román Díez

Guillermo Román Díez Concurrencia Creación de Procesos en Java Guillermo Román Díez [email protected] 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

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

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

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) [email protected] Programación concurrente

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. 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

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

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

Guía práctica de estudio 12: Hilos

Guía práctica de estudio 12: Hilos : Elaborado por: M.C. M. Angélica Nakayama C. Ing. Jorge A. Solano Gálvez Autorizado por: M.C. Alejandro Velázquez Mena Guía práctica de estudio 12: Objetivo: Implementar el concepto de multitarea utilizando

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

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

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

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

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

Apuntes de Java. Tema 10: Threads. Uploaded by Ingteleco

Apuntes de Java. Tema 10: Threads. Uploaded by Ingteleco Apuntes de Java Tema 10: Threads Uploaded by Ingteleco http://ingteleco.webcindario.com [email protected] La dirección URL puede sufrir modificaciones en el futuro. Si no funciona contacta por email

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

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

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

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

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

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

CAPÍTULO 2. PROCESOS VS. HILOS

CAPÍTULO 2. PROCESOS VS. HILOS CAPÍTULO 2. PROCESOS VS. HILOS El objetivo de este capítulo es el de discutir con un poco más de profundidad todo lo relacionado con el concepto de proceso que sea relevante para el estudio de la programación

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 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

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

Examen concurrencia Nov 2011

Examen concurrencia Nov 2011 Programación concurrente y Distribuída Curso 2011-12 Miguel Telleria, Laura Barros, J.M. Drake telleriam AT unican.es Computadores y Tiempo Real http://www.ctr.unican.es Contenido Código base Examen del

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

Cena de filosofos y sincronizacion java

Cena de filosofos y sincronizacion java Programación concurrente y Distribuída Curso 2011-12 Miguel Telleria, Laura Barros, J.M. Drake telleriam AT unican.es Computadores y Tiempo Real http://www.ctr.unican.es Objetivos Presentaros la aplicación

Más detalles

Concurrencia. Programación Concurrente. Espera ocupada. Primitivas IPC con bloqueo

Concurrencia. Programación Concurrente. Espera ocupada. Primitivas IPC con bloqueo Concurrencia Programación Concurrente Espera ocupada. Primitivas IPC con bloqueo Programación concurrente Los lenguajes concurrentes tienen elementos para: Crear procesos Sincronizar procesos Comunicar

Más detalles

Concurrencia en Java

Concurrencia en Java Concurrencia en Java Concurrencia en Java Con un único procesador, solamente puede ejecutarse una instrucción en un instante de tiempo. La frase anterior parece una perogrullada, pero no lo es. Posiblemente

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

Fundamentos de los Sistemas Operativos. Tema 2. Procesos José Miguel Santos Alexis Quesada Francisco Santana

Fundamentos de los Sistemas Operativos. Tema 2. Procesos José Miguel Santos Alexis Quesada Francisco Santana Fundamentos de los Sistemas Operativos Tema 2. Procesos 1998-2015 José Miguel Santos Alexis Quesada Francisco Santana Contenidos del Tema 2 Qué es un proceso Estructuras de datos para gestionar procesos

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

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

Programación orientada a objetos III

Programación orientada a objetos III Ingeniería en Desarrollo de software Semestre 05 Asignatura: Programación orientada a objetos III Clave: 16142524 Universidad Abierta y a Distancia de México 1 Índice PRESENTACIÓN DE LA UNIDAD... 3 PROPÓSITOS

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

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 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 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

Conceptos Básicos de Concurrencia en Java

Conceptos Básicos de Concurrencia en Java Conceptos Básicos de Concurrencia en Java Ingeniería del Software II Curso 2010/2011 Sergio Ilarri Artigas [email protected] Parte del material está extraído de JavaSun y Java Tutorial: Copyright 1994-2007

Más detalles

Concurrencia Monitores. Guillermo Román Díez

Concurrencia Monitores. Guillermo Román Díez Concurrencia Monitores Guillermo Román Díez [email protected] 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

Programación Concurrente Recopilación de teoría referente a la materia

Programación Concurrente Recopilación de teoría referente a la materia UNIVERSIDAD AMERICANA Programación Concurrente Recopilación de teoría referente a la materia Ing. Luis Müller Esta es una recopilación de la teoría referente a la asignatura Programación Concurrente, a

Más detalles

Java nos ofrece la clase Thread y la interfaz Runable que permiten que varios procesos estén funcionando de forma concurrente.

Java nos ofrece la clase Thread y la interfaz Runable que permiten que varios procesos estén funcionando de forma concurrente. Threads (hilos) Java nos ofrece la clase Thread y la interfaz Runable que permiten que varios procesos estén funcionando de forma concurrente. Conceptos: Proceso (thread o hilo): es un programa en ejecución

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

Tema 2: Aplicaciones Multihilo, Cliente Servidor

Tema 2: Aplicaciones Multihilo, Cliente Servidor Servidores Multiproceso PID=1 atiende A Tema 2: Aplicaciones Multihilo, Cliente Servidor 1 t=1. A puja t=1. B puja Multiples Clientes Concurrente Web Main () for (;;) Web new_connection = accept (i, NULL,

Más detalles

1 HILOS (THREADS) EN JAVA

1 HILOS (THREADS) EN JAVA 1 HILOS (THREADS) EN JAVA 1.1QUÉ ES UN THREAD La Máquina Virtual Java (JVM) es un sistema multihilo. Es decir, es capaz de ejecutar varios hilos de ejecución simultáneamente. La JVM gestiona todos los

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

Tema 4: Control del flujo de ejecución: Excepciones y Threads. Programación Orientada a Objetos. Marcos López Sanz

Tema 4: Control del flujo de ejecución: Excepciones y Threads. Programación Orientada a Objetos. Marcos López Sanz Tema 4: Control del flujo de ejecución: Excepciones y Threads Programación Orientada a Objetos Marcos López Sanz Máster en Informática Gráfica, Juegos y Realidad Virtual MARCOS LOPEZ SANZ Excepciones Def.:

Más detalles

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

Threads. La plataforma JAVA soporta programas multhreading a través del lenguaje, de librerías y del sistema de ejecución. Dos. Threads Un thread es un flujo de control secuencial dentro de un programa. A los threads también se los conoce como procesos livianos ó contextos de ejecución. Un thread es similar a un programa secuencial:

Más detalles

Procesos y Threads Procesos y Threads. Concurrencia Concurrencia Ventajas Ventajas. Rendimiento Rendimiento (paralelismo) (paralelismo)

Procesos y Threads Procesos y Threads. Concurrencia Concurrencia Ventajas Ventajas. Rendimiento Rendimiento (paralelismo) (paralelismo) Procesos y Threads Procesos y Threads Procesos Procesos Threads Threads Concurrencia Concurrencia Ventajas Ventajas Modelos Modelos Información Información adicional () adicional () Preparado Preparado

Más detalles

Federico Peinado www.federicopeinado.es

Federico Peinado www.federicopeinado.es Federico Peinado www.federicopeinado.es Depto. de Ingeniería del Software e Inteligencia Artificial disia.fdi.ucm.es Facultad de Informática www.fdi.ucm.es Universidad Complutense de Madrid www.ucm.es

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

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

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

Introducción a Java. Fernando Cerezal López. 24 Noviembre 2005

Introducción a Java. Fernando Cerezal López. 24 Noviembre 2005 24 Noviembre 2005 disponibles de acceso public private protected de tipo static abstract final modificadores más avanzados que no vamos a ver... Clase Sintaxis modificadores class nombreclase{} Tipos primitivos

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

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

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

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

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

! Qué es la POO?! Un paradigma de programación. ! No hay paradigmas mejores ni peores! Todos tienen sus ventajas e inconvenientes

! Qué es la POO?! Un paradigma de programación. ! No hay paradigmas mejores ni peores! Todos tienen sus ventajas e inconvenientes Introducción Programación orientada a objetos Curso INEM. Programación en Java Santiago Muelas Pascual [email protected]! Qué es la POO?! Un paradigma de programación! Un paradigma es una forma de afrontar

Más detalles

Multitarea en Java. Rafa Caballero - UCM

Multitarea en Java. Rafa Caballero - UCM Multitarea en Java Rafa Caballero - UCM Programa Monoproceso (monotarea) En cada momento hay una única instrucción ejecutándose Se dice que el programa es monotarea, o monoproceso o monohebra (o single

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

Concurso: Cuánto sabes de JAVA?

Concurso: Cuánto sabes de JAVA? Concurso: Cuánto sabes de JAVA? Motivación: o Para cambiar el ritmo de las jornadas y que no todas las actividades sean charlas o Recordar conocimientos y aprender algo nuevo. o Las preguntas pueden ayudarnos

Más detalles

Test : Conteste exclusivamente en una HOJA DE LECTURA ÓPTICA, no olvidando marcar que su tipo de examen es A.

Test : Conteste exclusivamente en una HOJA DE LECTURA ÓPTICA, no olvidando marcar que su tipo de examen es A. SISTEMAS INFORMÁTICOS I Junio 2003 INGENIERÍA EN INFORMÁTICA - Código Carrera 55 - Código Asignatura 077 Tipo de Examen: A NO SE PERMITE EL USO DE NINGÚN MATERIAL Tiempo: 2 horas Apellidos: Nombre: DNI:

Más detalles

Guía práctica de estudio 07: Herencia

Guía práctica de estudio 07: Herencia Guía práctica de estudio 07: Herencia Elaborado por: M.C. M. Angélica Nakayama C. Ing. Jorge A. Solano Gálvez Autorizado por: M.C. Alejandro Velázquez Mena Guía práctica de estudio 07: Herencia Objetivo:

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 Java

Concurrencia en Java Concurrencia en Java Herramientas proporcionadas por Java La Máquina Virtual (JVM) Pedro Pablo Gómez Martín La clase Thread Clase principal con la que conseguir concurrencia. La llamada a su método start()

Más detalles

PROGRAMACIÓN ORIENTADA A OBJETOS CON JAVA

PROGRAMACIÓN ORIENTADA A OBJETOS CON JAVA PROGRAMACIÓN ORIENTADA A OBJETOS CON JAVA Angel García Beltrán y José María Arranz Santamaría Sección de Publicaciones Escuela Técnica Superior de Ingenieros Industriales Universidad Politécnica de Madrid

Más detalles

Java y JVM: programación concurrente

Java y JVM: programación concurrente Java y JVM: programación concurrente Adolfo López Díaz Escuela de Ciencias de la Computación e Informática. Universidad de Costa Rica Resumen: El lenguaje de programación Java proporciona, sin necesidad

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

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

75-62 Técnicas de Programación Concurrente II 2004 java Threads 75-62 Técnicas de Programación Concurrente II 2004 java Threads FIUBA Ing. Osvaldo Clúa Bibliografía: tutorial de Java en http://java.sun.com Un buen libro (algo teórico) es Garg: Concurrent and Distributed

Más detalles

Servlet 3.0 (II) Servlets Asincronos

Servlet 3.0 (II) Servlets Asincronos En el articulo anterior hemos usado las anotaciones de Servlets 3.0 para dar de alta un servlet sin tener la necesidad de hacer uso del web.xml.en este articulo introduciremos el concepto de servlet asincrono.

Más detalles

Introducción a Java. Introducción a Java. Programación I

Introducción a Java. Introducción a Java. Programación I Introducción a Java Introducción a Java Programación I Como Funciona Tipos de Datos TIPO TAMAÑO RANGO byte 8 bits Valores numéricos de 128 a 127 short 16 bits Valores numéricos de 32.768 a 32.767 int 32

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 Hios Sincronización Ejercicios FAQ 2 + Hios 3 Un hio (Thread) es un proceso en ejecución dentro de un programa main java Thread t

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

Tareas en segundo plano AsyncTask Thread

Tareas en segundo plano AsyncTask Thread Tareas en segundo plano AsyncTask Thread Programació De Dispositius Mòbils PRDM Cristobal Raya Giner 2015 Hilos de ejecución En una aplicación Android, todas las actividades, los servicios y los broadcast

Más detalles

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

Diseño de tipos Igualdad, representación, código, copia y relación de orden Práctica 4 Diseño de tipos Igualdad, representación, código, copia y relación de orden Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión 1.0.1 Índice Gestión de excepciones

Más detalles

Concurrencia en Java

Concurrencia en Java Concurrencia en Java Concurrencia y Distribución Programación Avanzada Posgrado en Ciencia e Ingeniería de la Computación, UNAM 1. El mecanismo de threads Una aplicación Java o applet puede contener secciones

Más detalles