Para esta solución, cumplimos con las normas de orientación a objetos trasladando las responsabilidades a sus clases.
En efecto, quien tiene la responsabilidad de mantener la integridad de datos, es nuestra clase buffer, por lo que ella se deberá encargar de todo el control de sincronización.
Deberemos modificar el get y el set, haciéndolos synchronized y controlado la integridad, por lo que queda así:

Lo único que hemos hecho es trasladar los bucles de espera a los métodos get y set, y gestionar las esperas sobre este objeto (this.wait(), this.notifyAll())
Es muy importante que recordéis el lanzar el notifyAll() antes de realizar el return, ya que de otra manera, los demás hilos que estuvieran en wait, quedarían esperando por siempre….
La clase GeneraNumero
Dado que la sincronización la soporta Buffer, esta clase no se tiene que preocupar de nada

La clase PresentaNumero
Lo mismo para esta clase

Y por último, la clase Main, no es necesario modificarla. La dejamos tal y como estaba antes:

Igual que lo comentado para la solucion1, dado que no hemos previsto la finalización, deberemos abortar el programa cuando queramos. En eclipse lo hariamos asi:

Comparte esto:
- Comparte en Facebook (Se abre en una ventana nueva) Facebook
- Compartir en Telegram (Se abre en una ventana nueva) Telegram
- Compartir en WhatsApp (Se abre en una ventana nueva) WhatsApp
- Compartir en LinkedIn (Se abre en una ventana nueva) LinkedIn
- Compartir en X (Se abre en una ventana nueva) X
- Enviar un enlace a un amigo por correo electrónico (Se abre en una ventana nueva) Correo electrónico
- Más
- Haz clic en Pinterest (Se abre en una ventana nueva) Pinterest
- Imprimir (Se abre en una ventana nueva) Imprimir
- Compartir en Pocket (Se abre en una ventana nueva) Pocket
- Compartir en Reddit (Se abre en una ventana nueva) Reddit
- Compartir en Tumblr (Se abre en una ventana nueva) Tumblr
- Compartir en Mastodon (Se abre en una ventana nueva) Mastodon
Relacionado
Descubre más desde Recursos para formacion
Suscríbete y recibe las últimas entradas en tu correo electrónico.