Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
GRAVATAR
Productor Consumidor
Publicado: 25 noviembre, 2014 en Java
Etiquetas:concurrencia, concurrency, Fumadores, Java, monitores, notifiAll, notify, Productor
consumidor, synchronized, wait
La concurrencia es algo que suele costar ver pero que en realidad no es tan complicada, en Java podemos utilizar los
monitores y las hebras para realizar tareas concurrentes.
¿Qué es un monitor?
LOGOTIPO DEL BLOG
Los monitores son objetos destinados a ser usados sin peligro por más de un hilo de ejecución. Mas información.
¿Qué métodos nos proveen los monitores para la implementación de tareas concurrentes?
synchronized
Al poner la palabra reservada synchronized en un método en Java estamos indicando que en ese método tenemos
una sección crítica del código y por lo tanto las hebras que accedan a dicho método deberán hacerlo de forma
síncrona.
wait()
notify()
LICENCIA Con notify desbloqueamos una de las hebras que han sido bloqueadas al intentar acceder a un método sincronizado.
Después de esta llamada la hebra desbloqueada podrá tener acceso sin peligro a la zona crítica del método
sincronizado.
Esta obra está bajo una Licencia Creative
Commons Atribución 4.0 Internacional.
notifyAll()
BUSCAR EN EL BLOG
La diferencia entre notify y notifyAll es que con este último desbloqueamos todas las hebras que fueron bloqueadas
en un método síncrono y estas competirán por acceder a la zona crítica. Las hebras que no consigan acceder volverán
a ser bloqueadas.
Buscar en este sitio
Sabiendo todo esto podemos crear aplicaciones concurrentes mediante el uso de monitores, vamos a poner el
Seguir Programar es sencillo 5 ejemplo del productor consumidor de buffer limitado.
Tenemos un productor que va produciendo números de uno en uno y una serie de consumidores que irán
DAME UN ME GUSTA
consumiendo dichos números. El productor no podrá producir mas de un número y los consumidores no podrán
consumir nada si no se ha producido antes.
Primeramente nos crearemos la clase Contenedor, que será donde el productor producirá los números y de donde los
consumidores los consumirán:
Y por último el código principal, clase llamada ProductorConsumidor por ejemplo, quedaría de la siguiente forma:
También os dejo el código del problema de los fumadores en Java realizado con
monitores: [Java]_Problema_Fumadores
Tu voto:
Rate This
Comparte esto:
Relacionado
comentarios
Rodrigo dice:
12 abril, 2016 a las 3:59 pm
Muy bueno el ejemplo muchas gracias, practicando cosas hice algún cambio interesante.
En el productor hice la impresión antes del put, porque a veces salía antes la impresión del consumidor, tambien intenté
que el productor no tuviera sleep, esto a la larga me dejaba a los consumidores y al productor en sleep, lo corregí
cambiando el notify del get por notifyALL().
0 1 Rate This
Responder
Deja un comentario
Introduce aquí tu comentario...
Blog de WordPress.com.