Bien, continuemos.
Veamos otro ejemplo de sincronización de adrid, vamos a tener un productor que fabrica algo y un consumidor
que lo consume.
La idea es tener un producto, por lo tanto, tanto consumidor como productor interactúan al mismo tiempo
sobre este producto como recurso compartido.
Y acá tenemos que sincronizar.
Un productor no puede fabricar más de lo que el cliente consume, por ejemplo, y viceversa.
Un cliente no puede consumir más de lo que un productor está fabricando.
Entonces el tema es que organizar, sincronizar se fabrica uno, se consume uno, se fabrica otro,
se consume otro y así en orden sucesivamente.
No es que el cliente va de consumir tres producto cuando el productor haya fabricado recién uno solo
o dos, o viceversa.
El productor fabrica, fabrica, fabrica y apenas el consumidor consume uno.
Para el ejemplo podrían utilizar una panadería que se fabrica pan, se produce pan, se hornea.
Vamos a tener esta panadería como recurso compartido y dos hilos.
El productor que fabrica el pan y el consumidor que consume el pan.
Los dos.
Uno trata de ingresar a esta panadería para fabricar hornear el pan y el otro para comprar y consumir
y tiene que ir en orden.
Para eso vamos a utilizar estos métodos que mencionamos el Waite para esperar y el notify para notificar.
Una vez que esté listo el pan, por ejemplo, donde el productor fabrica un pan y lo deja disponible.
Vamos a tener una bandera disponible thru y cuando sea thru, el consumidor lo consume y lo dejan fols.
Se fijan que ya se consumió y ya no está disponible.
Entonces notificÃ nuevamente el productor para que fabrique otro, lo fabrica, notifica al cliente
o consumidor para que lo consuma y así serán notificando y uno quien espera mientras el otro haga su
trabajo.
Pero bien, veamos cómo sería.
Vamos a cerrar esta clases.
Y para organizar vamos a crear un opacados en vez de ejemplos.
Vamos a crear acá con New Package.
Debemos llamar ejemplo sink de sincronizacion bien, y acá vamos a crear nuestra clase.
Vamos a partir primero con este recurso compartido.
La panadería new yaba class panadería.
Y con atributos privé del tipo String, acá tenemos el recurso que hacer, el pan que vamos a fabricar
y consumir.
Y como explicaba un BULLÍAN disponible por defecto tan fols.
Recuerden que es bullían primitivo por defecto forzo.
Por lo tanto no tenemos ningún pan.
Tenemos que comenzar con el productor que fabrica hornea un pan.
Entonces sería el primer método.
Sincronice método sincronizado.
Voy vamos a llamar hornear, hornear o fabricar como queramos.
Estric la materia prima, por ejemplo la masa para el pan perfecto.
Ahí tenemos nuestro primer método.
Después vamos a tener otro método consumir que para el cliente.
Entonces en este van a ingresar lo que fabrican pan los panaderos para amasar pan y hornear.
Y el otro método, los clientes que van a comprar el pan que están fabricando los productores.
Bien, primero vamos a partir con 10 pan igual a la masa.
Acá vamos a simular con un mensaje que el panadero está horneando el pan.
Entonces Shout.
Entonces el panadero hornea el pan.
Y disponible?
Disponible lo dejamos en trUo, ya está disponible, recuerden Patten falso, pero que está disponible
dentro.
Entro bien, pero con esto no hacemos nada, porque en realidad tenemos que manejar el whats para esperar
mientras disponible esté en Trou.
Claro, lo dejamos en Thru, pero si el panadero vuelve a ingresar a hornear o vuelve a invocar este
método hornear con la masa.
Si no tenemos un Wilt que ponga en espera al panadero, cuando sea thru va a seguir fabricando.
Se fijan en Pacífi fabricando pan de forma controlada.
Entonces acá tenemos que colocar en espera al panadero, esperar que el consumidor se coma el pan y
que disponible vuelva a ser falso para volver a fabricar otro pan huai.
Entonces, mientras disponible estén thru o disponibles, simplemente wait.
Quedamos en espera y acá tenemos que manejar todo el trait catch.
Más acciones anidar.
Entonces, cuando esté disponible que llaman espera, pero la primera vez es falso.
Por lo tanto, el Wilt no se aplica, no entra.
Simplemente fabrica el primer pan, lo hornea, lo deja disponible y notificamos.
Tenemos que avisar al cliente de que el pan está listo para ser consumido por eso.
Notify.
Perdón.
Acá cometí un error.
El método es públic.
No privat.
Públic Entonces el método hornear tiene que ser público, no privado, porque si no, no lo podemos
invocar desde afuera.
Acá también.
Public Sincronice Strength consumir, consumir el pan y acá más o menos es todo lo contrario.
Es decir, mientras no esté disponible, tendremos que esperar a que té disponible, a que el panadero
fabrique un pan.
Will se distinto.
Un cierto de disponible o disponible igual Ráfols Weight.
Esperamos a que se fabrique.
Manejamos el trail cat exactamente igual que en el otro método.
Más acciones Hanni damos.
Bien, ya, pero cuando se fabricó ahora disponible Thru y nos notifica que está listo, perfecto,
lo consumimos Shout.
Cliente consume pan o se come el pan como queramos.
Y con tenemos diez punto pan.
Se fijan que tengo trabajando base al mismo pan, disipan, disipan.
Acá lo fabrica, lo deja disponible y acá lo consume, se lo come.
Bueno, y tenemos que notificar, pero antes de notificar dicho punto disponible lo dejamos en FOLS.
Ya no está disponible.
Se lo comió entonces acá como no está disponible no entra Wile.
Bueno, primero acá se notifica.
Por lo tanto el otro hilo despierta, vuelve a ingresar este método hornear no entre igual porque es
falso y fabrica otro pan y lo deja disponible en Thru y notificÃ.
Luego podría volver a entrar, pero como tan Thru Bakker esperandola en Waite.
Bueno, y es importante utilizar un UIL y no univ.
Por qué no podrían notificar por error o despertar por error?
Pero disponible sigue siendo thru.
Por lo tanto, todavía quien te está consumiendo entonces por seguridad de esa forma con un Uil en caso
de que nos despiertan con el notify o nos avise que está disponible, pero en realidad no está disponible.
Bueno, con el Weill a través de la bandera volvemos a preguntar se fijan mientras sea thru esperamos.
Pero como la bandera probablemente estén thru, despertemos por equivocación.
Por algún error.
Volvemos a entrar en Waite.
Más que nada por eso, para prevenir una de sincronizacion, algún tipo de error.
Entonces por eso es el quail y no el IF.
Entonces va a depender siempre maquinaba de la bandera true o false.
Y mientras se cumpla esa condición, vamos a estar en la espera a que uno u otro finalice su trabajo.
El consumidor se comió el pan o el productor haya creado nuevo pan y notificÃ bien.
Y qué faltaría acá en el consumir?
Bueno, faltaría notificar notify y retornamos el recurso el pan en este caso para que podamos hacer
alguna cosa en el cliente con el pan, por ejemplo, dentro del método rrán del consumidor hacer algo
con ese objeto.
Con este recurso y la próxima clase continuamos con los hilos.
Vamos a crear el panadero, que sería el fabricante o productor y el consumidor el cliente que consume
el pan.
Nos vemos.