PRODUCTORES CONSUMIDORES

Se ha hablado mucho sobre sincronización y su implementación en varios lenguajes, como C, Pascal o C++ entre otros.

En post anteriores detalle algunos procesos de sincronización dentro de Java, solo con la implementación de objetos y emulando el uso de los mismos con la detención del hilo principal de la aplicación, (en java por cada aplicaciones existe al menos un Thread principal), pero ahora pongo a su consideración el siguiente ejemplo basado en el problema de “Productor consumidor”.

La aplicación resuelve el siguiente problema, existen dos procesos(un consumidor y un productor) que tienen como recurso compartido una sección de memoria(en mi caso un buffer) y deberían funcionar de tal manera que el consumidor solo pueda recoger la información si el productor ya ha colocado algo dentro y viceversa.

Bueno, mi aplicación utiliza dos Thread uno para consumidor y otro para productor y como recurso compartido se creará un pequeño objeto que me permita almacenar un número entero que el consumidor irá sumando 5 veces.

Para controlar el acceso a sus métodos utilizaré para cada uno el atributo Synchronized que implementa java en su API y que permite que solamente un hilo a la vez ingrese a este método.

Ahora bien, el control de acceso tiene que ser en orden, para implementar esto en código utilizo una variable entera cuyo valor determinará cual de los hilos podrá acceder para leer/escribir el valor.

Además se utilizan las sentencias wait() para indicar a cualquiera de los hilos que deberá esperar si el buffer esta ocupado y también la sentencia notify() para indicar que el buffer ha sido desocupado. Recuerda que en este caso la sentencia notify() es válida pues solo utilizamos dos hilos, si necesitáramos más tendríamos que hacer uso de notifyAll().

A continuación una captura de la ejecución,

Todo indica que la aplicación puede controlar la ejecución de dos hilos que manejan recursos compartidos, verdad? Si deseas descargarla puedes acceder aquí, la aplicación esta en java y bajo el IDE NetBeans 6.0

Saludos,

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: