1
00:00:00,240 --> 00:00:01,050
Bien, continuemos.

2
00:00:01,110 --> 00:00:08,070
Veamos otro ejemplo de sincronización de adrid, vamos a tener un productor que fabrica algo y un consumidor

3
00:00:08,250 --> 00:00:08,910
que lo consume.

4
00:00:09,030 --> 00:00:15,600
La idea es tener un producto, por lo tanto, tanto consumidor como productor interactúan al mismo tiempo

5
00:00:15,600 --> 00:00:18,330
sobre este producto como recurso compartido.

6
00:00:18,480 --> 00:00:19,800
Y acá tenemos que sincronizar.

7
00:00:19,950 --> 00:00:26,310
Un productor no puede fabricar más de lo que el cliente consume, por ejemplo, y viceversa.

8
00:00:26,490 --> 00:00:31,410
Un cliente no puede consumir más de lo que un productor está fabricando.

9
00:00:31,560 --> 00:00:37,080
Entonces el tema es que organizar, sincronizar se fabrica uno, se consume uno, se fabrica otro,

10
00:00:37,170 --> 00:00:40,440
se consume otro y así en orden sucesivamente.

11
00:00:40,620 --> 00:00:46,290
No es que el cliente va de consumir tres producto cuando el productor haya fabricado recién uno solo

12
00:00:46,380 --> 00:00:47,820
o dos, o viceversa.

13
00:00:48,060 --> 00:00:52,800
El productor fabrica, fabrica, fabrica y apenas el consumidor consume uno.

14
00:00:52,860 --> 00:00:58,200
Para el ejemplo podrían utilizar una panadería que se fabrica pan, se produce pan, se hornea.

15
00:00:58,320 --> 00:01:03,070
Vamos a tener esta panadería como recurso compartido y dos hilos.

16
00:01:03,180 --> 00:01:06,870
El productor que fabrica el pan y el consumidor que consume el pan.

17
00:01:06,960 --> 00:01:07,590
Los dos.

18
00:01:07,770 --> 00:01:13,800
Uno trata de ingresar a esta panadería para fabricar hornear el pan y el otro para comprar y consumir

19
00:01:13,920 --> 00:01:15,180
y tiene que ir en orden.

20
00:01:15,240 --> 00:01:21,960
Para eso vamos a utilizar estos métodos que mencionamos el Waite para esperar y el notify para notificar.

21
00:01:22,020 --> 00:01:27,810
Una vez que esté listo el pan, por ejemplo, donde el productor fabrica un pan y lo deja disponible.

22
00:01:28,020 --> 00:01:33,930
Vamos a tener una bandera disponible thru y cuando sea thru, el consumidor lo consume y lo dejan fols.

23
00:01:34,050 --> 00:01:36,330
Se fijan que ya se consumió y ya no está disponible.

24
00:01:36,420 --> 00:01:42,660
Entonces notificÃ nuevamente el productor para que fabrique otro, lo fabrica, notifica al cliente

25
00:01:42,720 --> 00:01:49,350
o consumidor para que lo consuma y así serán notificando y uno quien espera mientras el otro haga su

26
00:01:49,350 --> 00:01:49,830
trabajo.

27
00:01:49,980 --> 00:01:51,360
Pero bien, veamos cómo sería.

28
00:01:51,510 --> 00:01:53,100
Vamos a cerrar esta clases.

29
00:01:54,130 --> 00:01:57,910
Y para organizar vamos a crear un opacados en vez de ejemplos.

30
00:01:58,570 --> 00:02:00,750
Vamos a crear acá con New Package.

31
00:02:01,930 --> 00:02:09,100
Debemos llamar ejemplo sink de sincronizacion bien, y acá vamos a crear nuestra clase.

32
00:02:09,280 --> 00:02:11,800
Vamos a partir primero con este recurso compartido.

33
00:02:11,860 --> 00:02:17,260
La panadería new yaba class panadería.

34
00:02:19,110 --> 00:02:26,250
Y con atributos privé del tipo String, acá tenemos el recurso que hacer, el pan que vamos a fabricar

35
00:02:26,340 --> 00:02:27,000
y consumir.

36
00:02:28,380 --> 00:02:35,000
Y como explicaba un BULLÍAN disponible por defecto tan fols.

37
00:02:35,130 --> 00:02:38,280
Recuerden que es bullían primitivo por defecto forzo.

38
00:02:38,460 --> 00:02:40,260
Por lo tanto no tenemos ningún pan.

39
00:02:40,470 --> 00:02:45,450
Tenemos que comenzar con el productor que fabrica hornea un pan.

40
00:02:45,750 --> 00:02:47,130
Entonces sería el primer método.

41
00:02:48,990 --> 00:02:51,390
Sincronice método sincronizado.

42
00:02:52,430 --> 00:02:58,290
Voy vamos a llamar hornear, hornear o fabricar como queramos.

43
00:02:59,070 --> 00:03:04,530
Estric la materia prima, por ejemplo la masa para el pan perfecto.

44
00:03:04,530 --> 00:03:05,970
Ahí tenemos nuestro primer método.

45
00:03:06,150 --> 00:03:09,940
Después vamos a tener otro método consumir que para el cliente.

46
00:03:10,170 --> 00:03:16,410
Entonces en este van a ingresar lo que fabrican pan los panaderos para amasar pan y hornear.

47
00:03:16,590 --> 00:03:21,840
Y el otro método, los clientes que van a comprar el pan que están fabricando los productores.

48
00:03:23,150 --> 00:03:28,500
Bien, primero vamos a partir con 10 pan igual a la masa.

49
00:03:29,580 --> 00:03:34,050
Acá vamos a simular con un mensaje que el panadero está horneando el pan.

50
00:03:34,290 --> 00:03:35,250
Entonces Shout.

51
00:03:40,860 --> 00:03:43,140
Entonces el panadero hornea el pan.

52
00:03:45,960 --> 00:03:47,140
Y disponible?

53
00:03:47,910 --> 00:03:54,270
Disponible lo dejamos en trUo, ya está disponible, recuerden Patten falso, pero que está disponible

54
00:03:54,360 --> 00:03:54,840
dentro.

55
00:03:54,840 --> 00:04:01,140
Entro bien, pero con esto no hacemos nada, porque en realidad tenemos que manejar el whats para esperar

56
00:04:01,290 --> 00:04:03,750
mientras disponible esté en Trou.

57
00:04:03,870 --> 00:04:08,910
Claro, lo dejamos en Thru, pero si el panadero vuelve a ingresar a hornear o vuelve a invocar este

58
00:04:08,910 --> 00:04:10,510
método hornear con la masa.

59
00:04:10,770 --> 00:04:17,070
Si no tenemos un Wilt que ponga en espera al panadero, cuando sea thru va a seguir fabricando.

60
00:04:17,130 --> 00:04:20,040
Se fijan en Pacífi fabricando pan de forma controlada.

61
00:04:20,130 --> 00:04:26,100
Entonces acá tenemos que colocar en espera al panadero, esperar que el consumidor se coma el pan y

62
00:04:26,100 --> 00:04:31,620
que disponible vuelva a ser falso para volver a fabricar otro pan huai.

63
00:04:32,550 --> 00:04:37,860
Entonces, mientras disponible estén thru o disponibles, simplemente wait.

64
00:04:38,040 --> 00:04:41,990
Quedamos en espera y acá tenemos que manejar todo el trait catch.

65
00:04:43,630 --> 00:04:45,640
Más acciones anidar.

66
00:04:46,910 --> 00:04:51,140
Entonces, cuando esté disponible que llaman espera, pero la primera vez es falso.

67
00:04:51,170 --> 00:04:55,250
Por lo tanto, el Wilt no se aplica, no entra.

68
00:04:55,430 --> 00:05:01,190
Simplemente fabrica el primer pan, lo hornea, lo deja disponible y notificamos.

69
00:05:01,850 --> 00:05:06,650
Tenemos que avisar al cliente de que el pan está listo para ser consumido por eso.

70
00:05:06,660 --> 00:05:07,250
Notify.

71
00:05:10,100 --> 00:05:10,450
Perdón.

72
00:05:10,550 --> 00:05:11,540
Acá cometí un error.

73
00:05:12,020 --> 00:05:13,340
El método es públic.

74
00:05:13,410 --> 00:05:13,970
No privat.

75
00:05:15,440 --> 00:05:21,050
Públic Entonces el método hornear tiene que ser público, no privado, porque si no, no lo podemos

76
00:05:21,050 --> 00:05:22,190
invocar desde afuera.

77
00:05:22,820 --> 00:05:23,480
Acá también.

78
00:05:23,510 --> 00:05:34,340
Public Sincronice Strength consumir, consumir el pan y acá más o menos es todo lo contrario.

79
00:05:34,490 --> 00:05:39,350
Es decir, mientras no esté disponible, tendremos que esperar a que té disponible, a que el panadero

80
00:05:39,350 --> 00:05:40,550
fabrique un pan.

81
00:05:41,690 --> 00:05:43,700
Will se distinto.

82
00:05:43,910 --> 00:05:49,750
Un cierto de disponible o disponible igual Ráfols Weight.

83
00:05:50,660 --> 00:05:52,280
Esperamos a que se fabrique.

84
00:05:52,790 --> 00:05:56,030
Manejamos el trail cat exactamente igual que en el otro método.

85
00:05:56,120 --> 00:05:58,250
Más acciones Hanni damos.

86
00:05:59,300 --> 00:06:06,170
Bien, ya, pero cuando se fabricó ahora disponible Thru y nos notifica que está listo, perfecto,

87
00:06:06,260 --> 00:06:08,810
lo consumimos Shout.

88
00:06:10,760 --> 00:06:15,310
Cliente consume pan o se come el pan como queramos.

89
00:06:16,010 --> 00:06:19,230
Y con tenemos diez punto pan.

90
00:06:19,940 --> 00:06:24,730
Se fijan que tengo trabajando base al mismo pan, disipan, disipan.

91
00:06:25,100 --> 00:06:28,430
Acá lo fabrica, lo deja disponible y acá lo consume, se lo come.

92
00:06:29,410 --> 00:06:37,450
Bueno, y tenemos que notificar, pero antes de notificar dicho punto disponible lo dejamos en FOLS.

93
00:06:38,530 --> 00:06:39,610
Ya no está disponible.

94
00:06:39,820 --> 00:06:44,090
Se lo comió entonces acá como no está disponible no entra Wile.

95
00:06:44,290 --> 00:06:46,420
Bueno, primero acá se notifica.

96
00:06:46,480 --> 00:06:53,890
Por lo tanto el otro hilo despierta, vuelve a ingresar este método hornear no entre igual porque es

97
00:06:53,890 --> 00:06:58,480
falso y fabrica otro pan y lo deja disponible en Thru y notificÃ.

98
00:06:58,630 --> 00:07:03,820
Luego podría volver a entrar, pero como tan Thru Bakker esperandola en Waite.

99
00:07:04,030 --> 00:07:06,850
Bueno, y es importante utilizar un UIL y no univ.

100
00:07:06,940 --> 00:07:10,540
Por qué no podrían notificar por error o despertar por error?

101
00:07:10,600 --> 00:07:12,040
Pero disponible sigue siendo thru.

102
00:07:12,130 --> 00:07:17,650
Por lo tanto, todavía quien te está consumiendo entonces por seguridad de esa forma con un Uil en caso

103
00:07:17,650 --> 00:07:23,110
de que nos despiertan con el notify o nos avise que está disponible, pero en realidad no está disponible.

104
00:07:23,200 --> 00:07:29,570
Bueno, con el Weill a través de la bandera volvemos a preguntar se fijan mientras sea thru esperamos.

105
00:07:29,680 --> 00:07:34,510
Pero como la bandera probablemente estén thru, despertemos por equivocación.

106
00:07:34,660 --> 00:07:35,470
Por algún error.

107
00:07:35,620 --> 00:07:37,180
Volvemos a entrar en Waite.

108
00:07:37,300 --> 00:07:42,100
Más que nada por eso, para prevenir una de sincronizacion, algún tipo de error.

109
00:07:42,270 --> 00:07:44,830
Entonces por eso es el quail y no el IF.

110
00:07:44,950 --> 00:07:49,460
Entonces va a depender siempre maquinaba de la bandera true o false.

111
00:07:49,660 --> 00:07:55,810
Y mientras se cumpla esa condición, vamos a estar en la espera a que uno u otro finalice su trabajo.

112
00:07:56,020 --> 00:08:01,480
El consumidor se comió el pan o el productor haya creado nuevo pan y notificÃ bien.

113
00:08:01,630 --> 00:08:03,400
Y qué faltaría acá en el consumir?

114
00:08:03,490 --> 00:08:13,150
Bueno, faltaría notificar notify y retornamos el recurso el pan en este caso para que podamos hacer

115
00:08:13,210 --> 00:08:20,410
alguna cosa en el cliente con el pan, por ejemplo, dentro del método rrán del consumidor hacer algo

116
00:08:20,410 --> 00:08:21,070
con ese objeto.

117
00:08:21,160 --> 00:08:24,040
Con este recurso y la próxima clase continuamos con los hilos.

118
00:08:24,130 --> 00:08:31,330
Vamos a crear el panadero, que sería el fabricante o productor y el consumidor el cliente que consume

119
00:08:31,330 --> 00:08:31,660
el pan.

120
00:08:31,750 --> 00:08:32,470
Nos vemos.
