Bien, continuemos con un poco de lleva 8.
Cómo podría modificar el ejemplo anterior?
Pero utilizando expresiones lambda, es decir, en B tener acá una clase panadero y un consumidor,
solo que sean expresiones danda de Ranavalona.
Entonces en esta clase vamos a modificar un poco este código para emigrar a la forma de Java 8, una
programación un poco más funcional.
Bien, entonces vamos a copiar el ejemplo productor consumidor.
Lo pegamos donde mismo ejemplo cinq, lo pegamos, le colocamos yaba 8.
Bueno, lo primero en el Trib quitar esto.
El panadero lo quitamos y quitamos también el consumidor y lo modificamos.
Esto con una expresión lanta s, con los paréntesis, una flecha y las llaves.
Y haga también el otro Dorit exactamente lo mismo.
Paréntesis de los argumentos del método rrán.
En realidad no tiene el cuerpo del rango.
Acá esta panadería perfecto.
Vamos a ir a panadero.
Y copiamos todo lo que está en el rango panadería no necesario, porque lo tenemos como una variable
del método main.
Entonces copiamos el for volvemos.
Y lo pegamos acá en vez de panadería.
Bueno, le colocamos P, que es el que está acá.
Este es el objeto.
Estoy acá, lo cerramos para no confundirnos, lo cerramos.
Vamos a consumidor, lo mismo copiamos el for.
Y lo pegamos acá.
Vem?
Ya podemos cerrar consumidor y panadero.
Qué tal ejemplo utilizando el precio en Atlanta?
Muy parecido.
Entonces era la panadería.
Es un atributo del método Main.
En vez de la clase que teníamos con la implementación de la interfaz Highbury.
Vamos a probar.
Se fijen en orden 1 1 2 2 3 3 4 4, entonces arponero hornea.
El cliente consume el mismo ya sin orden hasta llegar al 9.
Bien, voy a cerrar acá.
No les dejaré que lo hagan solamente para que entendamos el concepto de sincronización y ver errores.
Por ejemplo, si nos vamos a panadería y quitamos este modificador, qué va a pasar?
Bueno, no marca ningún error, pero su método no está sincronizado.
Y recuerden que el Waite, igual que Notify, no se pueden utilizar en método que no esté sincronizado.
De hecho, vamos a levantar y debería marcar un error.
Se fijan, acá está.
Estado ilegal del monitor.
El actual Tried no es propietario del monitor del objeto monitor porque el método no está sincronizado.
Entonces, por eso es importante sincronizar.
Eso es lo primero.
Volvamos a panadería.
Ahora, qué pasa si comentamos lo wait y los notify?
Bueno, hoy dejaría de marcar error, pero entraría todo al mismo tiempo y no habría ninguna sincronización.
Es muy probable que cliente tratemos zumito artido sin siquiera el productor haber fabricado ningún
pan.
Por qué?
Porque el productor tiene un Kiley.
Bueno, ahí vamos a ver.
Comentabamos Notify?
Perfecto, entonces recuerden si nos vamos acá.
Acá el panadero que hornea el pan tiene un deley, entonces se demora entre 500 a 2000 milisegundos.
Bueno, los dos arrancan al mismo tiempo, pero como el consumidor cliente no tiene delay, va a consumir
todos los días al mismo tiempo, prácticamente de inmediato, si ni siquiera el panadero fabricó ninguno.
Porque no hay sincronización.
Veamos.
Se fijan, está todo nulo porque no hay pan y recién el panadero empieza a hornear.
Ahora, qué pasa si colocamos el sleep exactamente igual?
Voy a copiar esto acá en el cliente iba hasta la cosa más o menos pareja, pero de sincronizada también.
Probablemente cliente consuma dos o tres.
El panadero va a producir tres al mismo tiempo.
Veamos.
Nul primero con su menú, después bueno, el primero que termine y vamos viendo, pero ya sabe que está
sincronizado.
Se fija el cliente consume pan 9 cliente consume pan 9 cliente con su pan 9 se fijan después cliente
consume nul, porque trató de consumir primero sin estar fabricado ningún pan.
Luego el panadero hornea el primer pan.
Cliente consume el pan cero después, pero acá tenemos panadero 2 panes de forma seguida el cliente
consume 1 panadero, hornea otro y así después el panadero 2 panes, después de nuevo 2 panes.
Es decir, no va sincronizado.
Después cliente consume los 3 últimos pan.
Por eso es importante sincronizar bien.
Entonces vamos a ir a Panadería Control Z para comentar
y colocar los sincronizarse.
Listo.
Entonces ahora volvemos.
Dejémoslos dos con él, es Liev.
Yetta nace.
Entonces, Independiente quien parta primero va a estar sincronizado.
Porque supongamos que el cliente parte primero antes que el panadero y el cliente trata de comprar un
pan.
Qué va a pasar?
Recuerden, tenemos disponible en fols.
Entonces va a ir de acá a consumir disponible.
Es tan falso.
Entonces, mientras sea falso, va a estar esperando.
Entonces, si entra primero, el cliente tiene que esperar de entrada, de entrada.
Entre el while espera a que el productor fabrique un pan.
Como no está disponible el productor, esto se lo salta y lo fabrica.
Lo dejan Trum y notificÃ como están Thru.
Después queda esperando el panadero a que el cliente consuma.
El cliente ya puede consumir porque está en Trum.
Por lo tanto ya no ejecuta el while.
Se sale del while.
Además despertó con el notify, se sale del while y lo consume y lo dejan forzÃ y así sucesivamente.
Se empiezan a sincronizar uno con otro.
Nada más.
Continuamos en la siguiente clase.