Home
Práctica 9: Hilos en Java
Contents
1. Exclusi n mutua l e Los hilos participantes deben sincronizarse con el mismo objeto e Ejemplo public static void main Contador contador Thread hilol Thread hilo2 hilol start hilo2 start 75 59 T cnicas de Programaci n Concurrente Introducci n Creaci n de Hilos Secciones cr ticas Exclusi n mutua Se alizaci n de hilos Bibliograf a Exclusi n mutua 1 e Ejemplo donde no hay excl public static void main Contador contadorl Contador contador2 Thread hilol Thread hilo2 hilol sStart hilo2 star 75 59 T cnicas de Programaci n Concurrente String ll args 1 new Contador new Thread new Hilo contador new Thread new Hilo contador Concurrencia en Java usi n mutua String args 4 new Contador new Contador Thread new Hilo contador1 Thread new Hilo contador2 Concurrencia en Java Introducci n Creaci n de Hilos Secciones cr ticas Exclusi n mutua Se alizaci n de hilos Bibliograf a Se alizaci n de hilos l o Se debe tener el monitor adquirido para poder llamar a los siguientes m todos e M todo wait libera el monitor adquirido y suspende el hilo hasta que otro hijo llame a notify o notifyAll o M todo notify despierta alguno de los hilos que espera por el monitor e M todo notifyAll despierta todos los hilos que esperan por el monitor 75 59 T cnicas de Programaci n Concurre
2. private static final int VUELTAS 5 public static void main Stringl args 1 Buffer buffer new Buffer new Thread new Productor buffer VUELTAS new Thread new Consumidor buffer VUELTAS Thread productor Thread consumidor productor start consumidor start productor join consumidor join System out println catch InterruptedException e 1 e printStackTrace kkk Fin del programa FOV NQOOUV FO IQ ml Hi Listado 13 Ejemplo 4 Clase Consumidor package org tcpl ejemplo4 hilos import org tcpl1 ejemplo4 buffer Buffer public class Consumidor implements Runnable 1 private Buffer buffer private int vueltas public Consumidor Butter b int vueltas l this butter b this vueltas vueltas ji COverride public void run l for int i 0 i lt vueltas i 4 calcular valor random a dormir int aDormir calcularRandom 1 10 keer el valor del buffer int valor buffer getValor System out println Consumidor valor leido del buffer tiempo a dormir aDormir tey d Thread sleep aDormir 1000 catch InterruptedException e 1 private int calcularRandom int max int min return int Math random max min min Listado 14 Ejemplo 4 Clase Productor 14 valor package org tcpl ejemplo4 hilos import org tcpl1 ejemplo4 buffer Buffer public class Productor implements Runnab
3. 10 11 Thread hilol new Thread new Hilo contador 12 Thread hilo2 new Thread new Hilo contador 13 14 hilol sbarb 15 kiloj stare 16 17 18 Listado 5 Ejemplo 2b Main 1 package org tcp1 ejemplo2 main 2 3 import org tcp1 ejemplo2 contador Contador 4 import org tcp1 ejemplo2 hilos Hilo OO NODO FON H OO NOVI HOONH CJ SW IN m public class Ejemplo2b 1 public static void main String ares Contador contadori new Contador Contador contador2 new Contador Thread hilol1 Thread hilo2 new Thread new Hilo contador1 new Thread new Hilo contador2 bilol start 0 hilo2 start O Listado 6 Ejemplo 2 Clase Hilo package org tcp1 ejemplo2 hilos import java util Randon import org tcp1 ejemplo2 contador Contador public class Hilo implements Runnable 1 private Contador contador public Hilo Contador contador 1 this contador contador J COverride public void run for int i 0 i lt 10 i Random rand new Random int cantidad rand nextInt 100 System out println Hilo Thread currentThread getId incrementa en cantidad el contador contador incrementar cantidad Listado 7 Ejemplo 2 Clase Contador package org tcpl ejemplo2 contador public class Contador 1 private int valor public Contador 4 valor 0 Ji public int getValor 1 return valor public void incrementar int can
4. posicionDelBuffer posicion buffer bufferlnicial h this this this this this COverride public void run 4 for int i 0 i lt this vueltas i 4 h cantidad barrera vueltas cantidad barrera vueltas se obtiene el resultado del calculo float resultado procesarBuffer EEN 1 catch Peach se imprimen los datos en pantalla System out println Vuelta i 1 Worker his posicionDelBuffer Buffer inicial Arrays toString this buffer Resultado resultado se espera a que todos terminen el calculo antes de actualizar el buffer this barrera await se guarda el valor obtenido en la posicion correspondiente para la sigutente vuelta this buffer this posicionDelBuffer resultado se espera a que todos terminen de escribir en el buffer antes de iniciar la siguiente vuelta this barrera await InterruptedException e 1 printStackTrace BrokenBarrierException e 1 printStackTrace e e private float procesarBuffer 1 float resultado for int i 0 i lt this cantidad i resultado this buffer i or return resultado
5. org tcp1 ejemplo3 hilos import java util Randon import org tcp1 ejemplo3 buffer Buffer public class HiloEscritor implements Runnable 1 private Buffer buffer private int vueltas public HiloEseribor Buffer butter int vueltas this buffer buffer this vueltas vueltas COverride public void run l for int i 0 i lt vueltas i dato 12 int aDormir this calcularRandom 10 System out println HiloEscritor durmiendo aDormir segundos J way ii Thread sleep 1000 aDormir catch InterruptedException e int dato this calcularRandom 100 System out println HiloEscritor buffer buffer setValor dato escribiendo dato en el 33 34 35 36 37 38 private int calcularRandom int maximo 1 Random rand new Random return rand nextInt maximo Listado 11 Ejemplo 3 Clase Buffer package org tcp1 ejemplo3 buffer public class Buffer 1 private int valor public Butter valor 0 OO NOVI HOVONMIH public synchronized int getValor 1 catch InterruptedException e 1 return valor public synchronized void setValor int valor 1 this valor notifyAll OO NODO HON HNH Listado 12 Ejemplo 4 Main package org tcp1 ejemplo4 main import org tcp1 ejemplo4 buffer Buffer import org tcp1 ejemplo4 hilos Consumidor import org tcpl1 ejemplo4 hilos Productor public class Ejemplo4 1
6. valor v disponible true notifyAll el productor libera el monitor Listado 16 Ejemplo 5 Main package org tcp1 ejemplo5 main import import import import public org org org org tcpl tcpl tcpl tcpl ejemplo5 buffer Buffer ejemplo5 buffer Semaforo ejemplo5 hilos Consumidor ejemplo5 hilos Productor class Ejemplob 1 private Static final int VUELTAS 5 public static void main Stringl args 1 Buffer buffer new Buffer Semaforo semaforoLectura new Semaforo Semaforo semaforoEscritura new Semaforo Thread thrProductor new Thread new Productor buffer semaforoLectura semaforoEscritura VUELTAS Thread thrConsumidor new Thread new Consumidor buffer semaforoLectura semaforoEscritura VUELTAS thrProductor start thrConsumidor start LI e EhrProductor joim thrConsumidor join System out println x x Fin del programa catch InterruptedException e 1 e printStackTrace Listado 17 Ejemplo 5 Clase Consumidor TT A 0 1 Dia ys 15 OO Y DD Ol HON e Rap ONO 14 15 16 18 19 20 22 23 24 25 26 27 29 30 32 33 34 35 37 38 40 41 42 43 44 45 46 47 OO JD O BEONA package org tcp1 ejemplo5b hilos import org tcp1 ejemplo5 buffer Buffer import org tcp1 ejemplo5 buffer Semaforo public class Consumidor implements Runnable 1 Buffer buf
7. Practica 9 Hilos en Java 15 59 T cnicas de Programaci n Concurrente Ejercicios En el caso del lenguaje Java cuando la m quina virtual interpreta un programa ejecuta un proceso Una computadora con una sola CPU puede realizar multiprogramaci n al reasignar la CPU a varios procesos y as stos se ejecutan concurrentemente Dentro del proceso el control puede seguir solamente un hilo de ejecuci n que por lo general comienza con el primer elemento del main recorriendo una secuencia de instrucciones y terminando cuando se regresa al main Un programa Java puede administrar varias secuencias de ejecuci n concurrentes Cada secuencia es un hilo independiente y todos comparten tanto el espacio de direcciones como los recursos del sistema operativo Por lo tanto cada hilo puede acceder a todos los datos y procedimientos del programa pero tiene su propio contador de programa y su pila de llamadas a procedimientos Un hilo tambi n se conoce como proceso ligero E 2 10 Estudiar cu les m todos de la clase Object ayudan al procesamiento multihilos Qu se entiende por exclusi n mutua y por sincronizaci n de procesos Dise ar un programa en el cual se crea y despacha un hilo hijo de tal forma que el programa termina hasta que el hijo termina Escribir un programa concurrente para contar el n mero de enteros pares e impares presentes en un arreglo de n meros enteros Describir las diferencias entre un proceso UNIX Lin
8. ackage org tcp1 ejemplo6 import Java util concurrent Cyclicbarrier public class Coordinador 1 private static final int CANTIDAD_VUELTAS 5 private float bufferl private int cantidad private CyclicBarrier barrera public Coordinador float bufferInicial int cantidad 1 this barrera new CyclicBarrier cantidad this buffer bufferlnicial this cantidad cantidad public void procesar 1 Thread workers new Thread this cantidad se lanzan los hilos for int i 0 i lt this cantidad i 4 workers i new Thread new CANTIDAD VUELTAS workers i start h se espera a que terminen los hilos for int i 0 i lt this cantidad i 1 EV workers i join catch InterruptedException e printStackTrace System out println Coordinador se Worker i buffer cantidad barrera e 1 termino el trabajo Dis 18 40 41 OO NOVI HON H 19 FJ package org import import import public java java java tcpl util util util ejemplo6 Arrays Listado 23 Ejemplo 6 Clase Worker concurrent BrokenBarrierException concurrent CyclicBarrier class Worker implements Runnable 4 private private private private private int posicionDelBuffer float buffer int cantidad GyclicBarrier barrera int vueltas public Worker int posicion float bufferInicial int cantidad CyclicBarrier barrera int vueltas 1
9. eto e C mo funciona e Cada objeto tiene un lock o monitor e S lo un hilo a la vez puede tomar el lock 75 59 T cnicas de Programaci n Concurrente Concurrencia en Java Introducci n Creaci n de Hilos Secciones cr ticas Exclusi n mutua Se alizaci n de hilos Bibliograf a Secciones cr ticas 11 e Ejemplo de bloque synchronized public void incrementar int cantidad 1 synchronized this 1 this valor cantidad System out println Contador valor actual this valor e Ejemplo de m todo synchronized public synchronized void incrementar int cantidad 1 this valor cantidad System out println Contador valor actual Shis valor 75 59 T cnicas de Programaci n Concurrente Concurrencia en Java Introducci n Creaci n de Hilos Secciones cr ticas Exclusi n mutua Se alizaci n de hilos Bibliograf a Secciones cr ticas 111 e Ejemplo de bloque synchronized en m todo est tico public static void escribirMensaje String mensaje 1 synchronized Contador class 1 System out println Mensaje del contador e Ejemplo de m todo est tico synchronized public static synchronized void escribirMensaje String mensaje 1 System out println Mensaje del contador 75 59 T cnicas de Programaci n Concurrente Concurrencia en Java Introducci n Creaci n de Hilos Secciones cr ticas Exclusi n mutua Se alizaci n de hilos Bibliograf a
10. fer Semaforo semaforoLectura Semaforo semaforoEscritura int vueltas private private private private public Consumidor Buffer buffer Semaforo semaforoLectura Semaforo int vueltas 1 this buffer buffer this semaforoLectura this semaforoEscritura this vueltas vueltas COverride public void run 1 for int i 0 i lt vueltas i 4 semaforoLectura semaforoEscritura calcular valor random a dormir int aDormir calcularRandom 1 10 el consumidor pide permiso para leer el valor System out println semaforoLectura p leer el valor del buffer buffer getValor Consumidor int valor System out println tiempo a dormir Consumidor DE esperando para leer valor leido del buffer AJ p aDormir 16 semaforoEscritura valor el consumidor notifica al productor que puede escribir el siguiente valor System out println semaforoEscritura v try 1 Consumidor notificando al productor Thread sleep aDormir 1000 catch InterruptedException e 1 y private int calcularRandom int max int min 1 return int Math random max min min Listado 18 Ejemplo 5 Clase Productor package org tcp1 ejemplo5b hilos import org tcp1 ejenmplob butter Butter import org tcp1 ejemplo5b buffer Semaforo public class Productor implements Runnable 1 Buffer buffer Semaforo semaforoLectura Semaforo se
11. le 1 OO NOVI HQOVONIH 00 Y DOT Aa O NARA private Buffer buffer private int vueltas public Productor Buffer b int vueltas this buffer b this vueltas vueltas COverride public void run for int i 0 i lt vueltas i 4 calcular valor random para guardar en el buffer int aGuardar calcularRandom 1 100 calcular valor random a dormir int aDormir calcularRandom 1 10 buffer setValor aGuardar System out println Productor valor guardado en el buffer aGuardar tiempo a dormir aDormir tr al Thread sleep aDormir 1000 catch InterruptedException e 1 i private int calcularRandom int max int min 1 return int Math random max min min ji Listado 15 Ejemplo 4 Clase Buffer package org tcpl ejemplo4 buffer public class Butter 1 private int valor private boolean disponible public Butter A OO Y HD Ol HOONMH valor 0 disponible false public synchronized int getValor 1 el consumidor toma el monitor while disponible false 1 al wait catch InterruptedException e 1 e printStackTrace disponible false notifyAll return valor el consumidor libera el monitor public synchronized Void setValor int v el productor toma el monitor while disponible true try L mado catch InterruptedException e 1 e printStackTrace h l
12. lizaci n de hilos Bibliograf a Resumen Introducci n Creaci n de Hilos O Secciones cr ticas O Exclusi n mutua O Se alizaci n de hilos Q Bibliografia 75 59 T cnicas de Programaci n Concurrente Concurrencia en Java Introducci n Creaci n de Hilos Secciones cr ticas Exclusi n mutua Se alizaci n de hilos Bibliograf a Introducci n 1 o Se implementa mediante hilos o threads no procesos e Los hilos se ejecutan dentro de procesos e Comparten recursos que fueron asignados por el sistema operativo e Comparten espacio de direcciones de memoria e Los hilos comparten datos mediante variables 75 59 T cnicas de Programaci n Concurrente Concurrencia en Java Introducci n Creaci n de Hilos Secciones cr ticas Exclusi n mutua Se alizaci n de hilos Bibliograf a Creaci n de hilos 1 e Los hilos se pueden crear de dos formas e Heredando de la clase Thread e Implementando la interfaz Runnable e Cu ndo se usa cada una e Desici n de dise o depende de la estructura de clases de la aplicaci n o Al implementar la interfaz Runnable se puede extender otra clase 75 59 T cnicas de Programaci n Concurrente Concurrencia en Java Introducci n Creaci n de Hilos Secciones cr ticas Exclusi n mutua Se alizaci n de hilos Bibliograf a Creaci n de hilos 11 e Ejemplo heredando de Thread public class HiloThread extends Thread 1 public void run 1 System o
13. lor 1 this valor valor li Listado 20 Ejemplo 5 Clase Semaforo package org tcp1 ejemplo5b buffer public class Semaforo 1 private int valor public Semaforo int valorinicial 1 valor valorlnicial de Ak Resta una unidad al valor del semaforo A public synchronized void p 4 si el valor del semaforo es 0 gt el hilo debe bloquearse while valor 0 ry el hilo libera el monitor y se bloguea Seba OS catch InterruptedException e 1 e printStackTrace li cuando el valor no es cero se resta una unidad valor RK Suma una unidad al valor del semaforo OLO NOV HON HNH O 0 NOVI HOVONH public synchronized void v 41 se suma una unidad al semaforo y se notifica a los hilos que estaban bloqueados valor notifyAll Listado 21 Ejemplo 6 Main package org tcp1 ejemplo6 import java util Random public class Main private static final int CANTIDAD_ITEMS 4 private static Random generadorRandom public static void main String args 1 float buffer new float CANTIDAD_ITEMS se inicializan los valores iniciales generadorRandom new Random for int i 0 i lt CANTIDAD_ITEMS i buffer i generadorRandom nextFloat Coordinador coordinador new Coordinador buffer CANTIDAD_ITEMS coordinador procesar System out println Fin del programa Listado 22 Ejemplo 6 Clase Coordinador p
14. maforoEscritura int vueltas private private private private public Productor Buffer buffer Semaforo semaforoLectura Semaforo semaforoEscritura int vueltas 4 this buffer buffer this semaforoLectura this semaforoEscritura this vueltas vueltas COverride public void xun l for int i1 O i vueltas ikr 14 semaforoLectura semaforoEscritura calcular valor random para guardar en el buffer int aGuardar calcularRandom 1 100 O 0 NOVI FONO Hm OO NOVI HONH 17 calcular valor random a dormir int aDormir calcularRandom 1 10 el productor pede permiso para escribir en el buffer System out println Productor esperando para escribir semaforoEscritura p buffer setValor aGuardar System out println Productor valor guardado en el buffer aGuardar tiempo a dormir aDormir el productor notifica al consumidor que puede leer System out println Productor notificando al consumidor semaforoLectura v teya Thread sleep aDormir 1000 catch InterruptedException e 1 private int calcularRandom int max int min 1 return int Math random max min min Listado 19 Ejemplo 5 Clase Buffer package org tcpl ejemplos butter public class Buffer 1 private int valor public Buffer A valor 0 i public int getValor 1 return valor di public void setValor int va
15. nte Concurrencia en Java Introducci n Creaci n de Hilos Secciones cr ticas Exclusi n mutua Se alizaci n de hilos Bibliograf a Se alizaci n de hilos 11 e Ejemplo de buffer con sincronismo public class Buffer 1 private int valor 0 public synchronized int getValor 1 try 1 wait catch InterruptedException e return valor public synchronized void setValor int valor 1 this valor valor notifyAll 75 59 T cnicas de Programaci n Concurrente Concurrencia en Java Introducci n Creaci n de Hilos Secciones cr ticas Exclusi n mutua Se alizaci n de hilos Bibliograf a Variables volatile Los hilos guardan los valores de las variables compartidas en sus caches La palabra clave volatile indica al compilador que el valor de la variable no debe cachearse y debe leerse siempre de la memoria principal De este modo los hilos ver n siempre el valor m s actualizado de la variable La declaraci n de una variable como volatile no realiza ning n lockeo en dicha variable 75 59 T cnicas de Programaci n Concurrente Introducci n Creaci n de Hilos Secciones cr ticas Exclusi n mutua Se alizaci n de hilos Bibliograf a Bibliograf a Concurrencia en Java e Java Concurrency in Practice Brian Goetz Tim Peierls Joshua Bloch Joseph Bowbeer David Holmes y Doug Lea e Tutorial de concurrencia de Oracle http docs oracle com java
16. se tutorial essential concurrency 75 59 T cnicas de Programaci n Concurrente Concurrencia en Java 10 Fuentes de los ejemplos Listado 1 Ejemplo 1 Main 1 package org tcp1 ejemplol main 2 3 import org tcp1 ejemplo1 hilos HiloRunnable 4 import org tcp1 ejemplo1 hilos HiloThread 5 6 public class Ejemplo1 1 T 8 public static void main String args 1 9 HiloThread hilol new HiloThread 10 Thread hilo2 new Thread new HiloRunnable 11 12 bilol start gt 13 hilo2 start 14 15 16 Listado 2 Ejemplo 1 Clase HiloRunnable package org tcpl ejemplol hilos public class HiloRunnable implements Runnable 1 COverride public void run X System out println Hola soy el hilo Thread currentiIhread pecId e implemento Runnable System out println Termine Listado 3 Ejemplo 1 Clase Hilo Thread 1 package org tcp1 ejemplol hilos 2 3 public class HiloThread extends Thread 1 4 5 public void run 4 6 System out println Hola soy el hilo Thread currentThread getId y heredo de Thread T System out println Termine 8 9 Listado 4 Ejemplo 2a Main 1 package org tcp1 ejemplo2 main 2 3 import org tcp1 ejemplo2 contador Contador 4 import org tcp1 ejemplo2 hilos Hilo 5 6 public class Ejemplo2a 1 T 8 public static void main String args 1 9 Contador contador new Contador
17. tidad 1 synchronized this 1 this valor cantidad System out println Contador valor actual this valor public static synchronized void escribirMensaje String mensaje 1 System out println Mensaje del Contador Listado 8 Ejemplo 3 Main package org tcp1 ejemplo3 main import org tcpi ejemplo3 buffer Buffer import org tcp1 ejemplo3 hilos HiloEscritor import org tcp1 ejemplo3 hilos HiloLector 11 OMO YD OE OQONA OO Y DD Ol HONMH 22 23 24 25 26 27 28 29 30 32 public class Ejemplo3 1 private static final int VUELTAS 5 public static void main String args 1 Buffer buffer new Buffer Thread hiloLector new Thread new HiloLector buffer VUELTAS Thread hiloEscritor new Thread new HiloEscritor buffer VUELTAS hiloLector start khiloEscritor start l Listado 9 Ejemplo 3 Clase HiloLector package org tcp1 ejemplo3 hilos import org tcp1 ejemplo3 buffer Buffer public class HiloLector implements Runnable 1 private Buffer buffer private int vueltas public HiloLector Buffer buffer int vueltas 1 this buffer buffer this vueltas vueltas OCOverride public void run 1 for int i 0 i lt vueltas i 4 System out println HiloLector esperando por el dato int dato buffer getValor System out println HiloLector dato leido del buffer Listado 10 Ejemplo 3 Clase HiloEscritor package
18. ut println Hola soy el hilo Thread currentThread getId y heredo de Thread System out println Termine 75 59 T cnicas de Programaci n Concurrente Concurrencia en Java Introducci n Creaci n de Hilos Secciones cr ticas Exclusi n mutua Se alizaci n de hilos Bibliograf a Creaci n de hilos III e Ejemplo implementando Runnable public class HiloRunnable implements Runnable 1 public void run 1 System out println Hola soy el hilo Thread currentThread getId e implemento Runnable System out println Termine 75 59 T cnicas de Programaci n Concurrente Concurrencia en Java Introducci n Creaci n de Hilos Secciones cr ticas Exclusi n mutua Se alizaci n de hilos Bibliograf a Creaci n de hilos 111 e Ejemplo programa principal public class Ejemplo1j 1 public static void main String args 1 HiloThread hilol new HiloThread Thread hilo2 new Thread new HiloRunnable Oy hilol start 5 khilo2 start 3 75 59 T cnicas de Programaci n Concurrente Concurrencia en Java Introducci n Creaci n de Hilos Secciones cr ticas Exclusi n mutua Se alizaci n de hilos Bibliograf a Secciones cr ticas l e Bloques synchronized mecanismo propio de Java o Dos partes e Un objeto que servir como lock e Un bloque de c digo a ejecutar en forma at mica e M todos synchronized si un bloque de c digo es un m todo compl
19. ux y un hilo de Java desde el punto de vista de la creaci n y administraci n de diferentes flujos de control en un nico programa concurrente escrito en C C o en Java Elaborar un manual de usuario que explique el objeto de los siguientes m todos de la clase Thread checkAccess start stop isAlive suspend resume interrupt join de stroy sleep yield y run En general estudiar la clase Thread Escribir un programa de prueba que verifique el funcionamiento de los m todos enumerados en el ejercicio anterior Implementar el algoritmo de Peterson en lenguaje Java Escribir un programa que genere hilos en particular demonios daemon con diversas tareas concurrentes entre s Elaborar dos versiones del mismo programa generando los hilos como derivados de Thread o bien como una implementaci n de la interfaz Runnable Elaborar un diagrama de transici n de estados de un hilo de Java indicando qu m todos de las clases del ambiente de desarrollo se corresponden con las transiciones del diagrama Apuntes Introducci n Creaci n de Hilos Secciones cr ticas Exclusi n mutua Se alizaci n de hilos Bibliograf a Concurrencia en Java 75 59 T cnicas de Programaci n Concurrente Facultad de Ingenier a Universidad de Buenos Aires 75 59 T cnicas de Programaci n Concurrente Concurrencia en Java Introducci n Creaci n de Hilos Secciones cr ticas Exclusi n mutua Se a
Download Pdf Manuals
Related Search
Related Contents
下穴・施肥穴などに、あると便利な穴あけ器 LPP Jeanne d`Arc à Ste Adresse ( 76) Ecolution Platinum-Ola-Wave MODE D`EMPLOI - Country Cousins Abroad PDF Trust Firewire PCI Card VI-2050 Betriebsanleitung Fillmatic Stand 02-2014 Icecrypt s3700CHD - TELE Datalogger DL2 V2 gebrauchsanleitung Copyright © All rights reserved.
Failed to retrieve file