1
00:00:00,180 --> 00:00:00,720
Bienvenidos.

2
00:00:00,750 --> 00:00:03,420
Continuamos con el framework Executar de Java.

3
00:00:03,450 --> 00:00:08,520
Qué parte del JDK permite ejecutar tareas de forma síncrona y concurrente?

4
00:00:08,580 --> 00:00:11,070
Pero desacoplar completamente la creación de los dret.

5
00:00:11,130 --> 00:00:15,990
Nosotros como desarrollador no tenemos que estar preocupándonos de crear instancias de lotería y pasar

6
00:00:15,990 --> 00:00:18,720
nuestras tareas que implementa la interfaz RONDELL?

7
00:00:18,810 --> 00:00:25,110
No, simplemente implementamos nuestras tareas y las asignamos al servicio al ejecutor.

8
00:00:25,230 --> 00:00:27,060
Él se encarga de gestionar todos los herid.

9
00:00:27,180 --> 00:00:31,650
El que era las instancias lo maneja, reutiliza algunos hilos que están disponible.

10
00:00:31,740 --> 00:00:35,250
Optimiza también maneja un pool de Drizzt para nuestras tareas.

11
00:00:35,280 --> 00:00:40,320
En fin, todo lo que es el ciclo de vida y creación de los hilos lo maneja este componente.

12
00:00:40,440 --> 00:00:46,710
Una ventaja porque recuerden que crear un try es costoso en términos de memoria y acá todo eso se optimiza

13
00:00:46,800 --> 00:00:47,910
y es mucho más limpio.

14
00:00:47,970 --> 00:00:54,210
Solamente implementamos nuestras tareas con la interfaz Rodney, pero además podemos implementar tareas

15
00:00:54,300 --> 00:00:57,380
que se le conoce como Implacables o Calabrese.

16
00:00:57,530 --> 00:01:03,720
Qué diferencia de un Ranavalona retorna la tarea en ejecución que se está ejecutando como un objeto

17
00:01:03,720 --> 00:01:09,000
futuro o uchos contiene la ejecución y eso nos permite administrar un poco la ejecución de nuestras

18
00:01:09,000 --> 00:01:09,420
tareas.

19
00:01:09,510 --> 00:01:12,860
Por ejemplo, saber si está en ejecución o si ya terminó.

20
00:01:12,870 --> 00:01:15,240
Si fue cancelada, también la podemos cancelar.

21
00:01:15,330 --> 00:01:16,830
En fin, un montón de características.

22
00:01:16,920 --> 00:01:21,960
Entonces, para resumir, se encarga de crear un pull de hilos, reutilizarlo y llevar a cabo nuestras

23
00:01:21,960 --> 00:01:22,470
tareas.

24
00:01:22,560 --> 00:01:23,520
Vamos a trabajar.

25
00:01:23,640 --> 00:01:25,140
Vamos a cerrar esto acá.

26
00:01:25,260 --> 00:01:32,720
Vamos a crear un package acá en ílos New Package le vamos a llamar ejemplo execute.

27
00:01:36,340 --> 00:01:36,540
Bien.

28
00:01:36,870 --> 00:01:40,530
Y una clase con el método main acá de ejemplo.

29
00:01:42,820 --> 00:01:43,800
Ejemplo executar.

30
00:01:45,280 --> 00:01:46,240
Con el método Main

31
00:01:49,290 --> 00:01:52,240
bien, hay dos interfaces importantes.

32
00:01:52,420 --> 00:01:58,990
Dos implementaciones tenemos executar a Seca y executar servis difference, que este primero solamente

33
00:01:59,020 --> 00:02:04,900
ejecuta una tarea con el método execute y pasamos una implementación, ya sea conlleva 8 una prisión

34
00:02:04,900 --> 00:02:11,080
landa o una instancia de un roleplay, una implementación del método Rrán para hacer algo y la ejecutÃ

35
00:02:11,170 --> 00:02:11,620
nada más.

36
00:02:11,650 --> 00:02:13,780
Simplemente la ejecuta y moldeamos.

37
00:02:13,930 --> 00:02:19,510
Mientras que el ejecutor service nos permite, además de ejecutar una tarea, hacer un seguimiento.

38
00:02:19,600 --> 00:02:25,630
Tal como explicaba, en vez de utilizar el Ranavalona, podríamos utilizar el cable o Calheira implacable

39
00:02:25,750 --> 00:02:31,950
y nos retorna la tarea que se está ejecutando como un objeto del tipo futuro o chor.

40
00:02:32,140 --> 00:02:37,720
Y ahí la podemos manejar, administrar, cancelar, saber si esta ejecución se ha finalizado.

41
00:02:37,780 --> 00:02:43,270
En fin, un montón de cosas que podemos implementar vamos a utilizar execute ourselves.

42
00:02:45,290 --> 00:02:48,480
Exequiel autor o ejecutor en español?

43
00:02:48,580 --> 00:02:54,810
Bueno, acá no tenemos que crear ninguna instancia a través de una clase de fabrica o Factory, una

44
00:02:54,810 --> 00:03:00,900
factoría que se encarga de crear instancias del ejecutor servis con diferentes implementaciones a través

45
00:03:00,900 --> 00:03:03,540
de la clase Ezequiel Hathors en plural.

46
00:03:05,350 --> 00:03:11,940
Entonces esta la clase de utilidad o fábrica que nos permite crear instancias con el new se fijan son

47
00:03:11,940 --> 00:03:14,240
método estático de diferentes implementaciones.

48
00:03:14,250 --> 00:03:22,290
Por ejemplo la típica en New Shinki tried executar para ejecutar un único grid es un pull de uno solo

49
00:03:22,440 --> 00:03:23,880
maneja una sola instancia.

50
00:03:24,090 --> 00:03:27,330
De esta forma podemos ejecutar varias tareas una detrás de otra.

51
00:03:27,360 --> 00:03:30,000
Primero tiene que terminar una para ejecutar la siguiente.

52
00:03:30,180 --> 00:03:36,030
Otra forma es el new fixed de Red Bull y acá sí que nos permite pasar por el método.

53
00:03:36,090 --> 00:03:43,680
Acá un entero con el tamaño del pull, por ejemplo, que maneje 5 drid, un poule, 5 Drizzt para toda

54
00:03:43,680 --> 00:03:49,320
nuestra tarea y él se encarga de asignar nuestras tareas a estos herid que están disponibles, disponible

55
00:03:49,440 --> 00:03:51,270
o que tenga que crear, pero siempre maneja.

56
00:03:51,270 --> 00:03:57,900
5 y si tenemos muchas tareas, por ejemplo, si el pool es de 5 y tenemos 10 tarea primero va a dejar

57
00:03:58,020 --> 00:04:03,630
5 ejecutándose al mismo tiempo y el resto en cola esperando a que finalicen.

58
00:04:03,720 --> 00:04:09,390
Y cuando finaliza una se van asignando las demás tareas a los Dredd que están quedando disponible o

59
00:04:09,390 --> 00:04:11,070
que se están ocupando para partir.

60
00:04:11,100 --> 00:04:14,130
Vamos a utilizar new single dret executar.

61
00:04:15,200 --> 00:04:15,920
El más simple.

62
00:04:16,300 --> 00:04:17,660
Bien, hoy tenemos a nuestro ejecutor.

63
00:04:17,720 --> 00:04:26,030
Vamos a tener una tarea simple roleplay, tarea y lo vamos a implementar con expresiones lambda.

64
00:04:26,570 --> 00:04:33,860
Entonces con los paréntesis del método rrán, las llaves y la implementación, aunque también, como

65
00:04:33,950 --> 00:04:38,540
hemos visto, puede ser una clase que implementa la interfaz red nivel y ahí implementar en el método

66
00:04:38,540 --> 00:04:40,070
RAM nuestra tarea.

67
00:04:44,630 --> 00:04:45,500
Inicio de la tarea.

68
00:04:46,160 --> 00:04:52,550
Bien, está comenzando para simular una tarea con un delay, con una carga, con un trabajo pesado,

69
00:04:52,580 --> 00:04:53,600
por ejemplo, una consulta.

70
00:04:53,670 --> 00:04:58,970
Hace rato vamos a utilizar un Dredd Sleep, pero también podemos utilizar otra forma.

71
00:04:59,120 --> 00:04:59,960
La vamos a ver ahora.

72
00:05:00,140 --> 00:05:08,660
Es como una alternativa al Tirith Sleep utilizando la clase Time y UNIT y acá seleccionamos la cantidad

73
00:05:08,750 --> 00:05:15,140
en tiempo o la unidad de tiempo, por ejemplo, segundos o milisegundos, minutos, horas, lo que sea.

74
00:05:15,230 --> 00:05:16,280
Nanosegundos.

75
00:05:16,970 --> 00:05:18,440
Vamos a seleccionar segundos.

76
00:05:19,880 --> 00:05:24,020
Punto Sleep se fijan muy parecido al 3 Leap.

77
00:05:24,140 --> 00:05:27,890
De hecho hace un sleep al hilo actual por detrás de escena.

78
00:05:27,980 --> 00:05:33,380
Es lo mismo que Dret es lipa, pero más automatizado porque ya maneja la conversión de tiempo.

79
00:05:33,470 --> 00:05:39,020
Por ejemplo, sicologo acá 1 corresponde a un segundo, ya que seleccionamos acá seconds.

80
00:05:39,110 --> 00:05:45,560
Si acá hubiésemos colocado 1000 seconds o milisegundo, acá colocamos 1000 1000 milisegundos para hacer

81
00:05:45,560 --> 00:05:50,150
referencia a un segundo de una forma más simple para manejar unidad de tiempo.

82
00:05:50,360 --> 00:05:54,740
Ben y el Sleep al igual que el Tirith Sleep acá no pide manejar el trait catch.

83
00:05:56,660 --> 00:05:57,080
Perfecto.

84
00:05:57,170 --> 00:06:04,970
Y en caso de que se interrumpa, vamos a colocar acá Dredd Punto Carrá en Tried y le invocamos el método

85
00:06:05,060 --> 00:06:08,160
interruptor para interrumpir la ejecución del Tirith actual.

86
00:06:08,360 --> 00:06:13,460
Aunque esto es opcional, pero en caso de que se detenga el extractor servis, después vamos a ver que

87
00:06:13,460 --> 00:06:17,860
se puede tener de forma abrupta la ejecución con chat down now.

88
00:06:18,020 --> 00:06:21,050
Después vamos a ver, pero acá se interrumpe la ejecución.

89
00:06:21,140 --> 00:06:26,840
Iba a lanzar esta sección interrumpe Exception y podemos interrumpir el hilo actual y de esa forma se

90
00:06:26,840 --> 00:06:27,320
libera.

91
00:06:27,470 --> 00:06:28,940
Despertamos el Sleep.

92
00:06:29,210 --> 00:06:31,070
Ven acá tenemos entonces la tarea.

93
00:06:31,340 --> 00:06:35,180
Inicio la tarea acá simulamos algún tipo de trabajo.

94
00:06:35,990 --> 00:06:40,310
También podemos imprimir el nombre del Drizzt,

95
00:06:43,880 --> 00:06:45,830
contribuir con el Carret.

96
00:06:46,100 --> 00:06:50,510
Dredd puntos get name y después acá.

97
00:06:50,510 --> 00:06:53,390
Al final finaliza la tarea.

98
00:06:57,140 --> 00:07:00,050
Ahora tenemos que registrar esta tarea al ejecutor.

99
00:07:00,980 --> 00:07:03,920
Acá le puse, acá me comí la e executar.

100
00:07:04,520 --> 00:07:09,680
En realidad, aunque lo vimos nombre variable executar punto.

101
00:07:10,190 --> 00:07:15,020
Acá tenemos el método submit o enviar, enviar una tarea o registrar.

102
00:07:15,200 --> 00:07:22,060
Acá podemos recibir un neighbors, una tarea común y corriente que hemos visto, pero también un calibre

103
00:07:22,250 --> 00:07:27,860
o calabrese, que también es una implementación de tarea, pero como aplicaba, devuelve el resultado

104
00:07:28,370 --> 00:07:29,570
en tipo futuro.

105
00:07:30,530 --> 00:07:33,290
Entonces la diferencia es que acá podemos retornar algún valor.

106
00:07:33,410 --> 00:07:36,350
Es un valor futuro que se retorna, se devuelve.

107
00:07:36,470 --> 00:07:43,790
Una vez que finaliza la tarea bien submit y pasamos la tarea, vamos a levantar.

108
00:07:46,320 --> 00:07:53,400
Recuerden que hace un sleep de un segundo se fijan inicio la tarea nombre del Drizzt finaliza la tarea,

109
00:07:53,670 --> 00:07:59,580
pero se mantiene en ejecución porque el ejecutor no ha finalizado, no se ha terminado y lo tenemos

110
00:07:59,580 --> 00:08:02,220
que detener porque si no nuestra aplicación sigue corriendo.

111
00:08:02,370 --> 00:08:04,260
Entonces acá vamos a colocar un stop.

112
00:08:05,290 --> 00:08:08,350
Solamente para que lo vean y finalizamos el proceso.

113
00:08:09,580 --> 00:08:18,070
Ahora, fíjense bien, voy a colocar un punto chat donde diga que tenemos dos versiones, dos forma

114
00:08:18,580 --> 00:08:24,010
mencioné por ahí el chat Down Now lo que hace es apagar de forma abrupta.

115
00:08:24,130 --> 00:08:29,800
El ejecutor lo cierra y las tareas que están pendientes o que se están ejecutando quedan interrumpidas,

116
00:08:29,860 --> 00:08:32,710
quedan a medio camino y podría ser un problema.

117
00:08:32,740 --> 00:08:38,680
Podría quedar ambiguo la ejecución de estos procesos, inconsistente con la información, con los datos

118
00:08:38,680 --> 00:08:43,570
que se están procesando, mientras que Jot Down es mucho mejor porque lo que hace es apagar una vez

119
00:08:43,570 --> 00:08:47,880
que finaliza la ejecución de toda la tarea que se están ejecutando en este momento.

120
00:08:47,950 --> 00:08:52,840
Pero también los que están en cola espera a que también se ejecuten y una vez que se haya realizado

121
00:08:52,840 --> 00:08:58,930
todas las tareas tanto en ejecución actualmente como en la cola realiza el CHADDHA se apaga.

122
00:08:59,080 --> 00:09:02,230
Ahora si vamos a levantar, vamos a ver la diferencia.

123
00:09:04,620 --> 00:09:09,900
Inicio Tarea Nombre Eldred Finalizar la tarea Lleca finaliza nuestra aplicación.

124
00:09:10,020 --> 00:09:12,540
Ya no tengo que detenerla, simplemente finaliza.

125
00:09:12,630 --> 00:09:14,460
Entonces siempre es Yata, tiene que ir.

126
00:09:14,760 --> 00:09:21,230
También tenemos otro método ejecutor punto a wait termina hecho.

127
00:09:21,840 --> 00:09:28,110
Entonces lo que hace es esperar a que finalicen todas las tareas y luego que se detenga el ejecutor

128
00:09:28,170 --> 00:09:34,170
para continuar con la ejecución del método main o del hilo principal y que tenga que pasar un time out,

129
00:09:34,560 --> 00:09:36,090
por ejemplo, de 2 segundo.

130
00:09:36,330 --> 00:09:41,430
Y como segundo argumento vamos a colocar la unidad a tiempo en segundos, por ejemplo.

131
00:09:41,640 --> 00:09:46,290
Entonces Taime UNIT punto seconds.

132
00:09:48,640 --> 00:09:52,170
Y ahora tenemos que manejar el troi catch o lanzar la excepción por el método.

133
00:09:52,290 --> 00:09:56,890
Vamos a colocar lanzar la sección en la firma el método del método Main.

134
00:09:56,970 --> 00:10:01,230
Acá se fijan lanza interruptor Exception ve como explicaba.

135
00:10:01,350 --> 00:10:06,600
Espera a que finalice la ejecución de las tareas para continuar con la ejecución del método main del

136
00:10:06,600 --> 00:10:07,320
método principal.

137
00:10:07,530 --> 00:10:13,410
Y pueden ocurrir dos eventos una, que finalice todas las tareas sin ningún problema y se cierra el

138
00:10:13,410 --> 00:10:16,050
ejecutor o bien que ocurra el time out.

139
00:10:16,530 --> 00:10:20,130
Bien, acabo de colocar un mensaje Shout para que sea más claro.

140
00:10:20,310 --> 00:10:21,870
Continuando con la ejecución del main.

141
00:10:28,790 --> 00:10:29,460
Del método Amén.

142
00:10:29,690 --> 00:10:30,260
Perfecto.

143
00:10:30,560 --> 00:10:34,580
Voy a colocar acá uno y acá dos.

144
00:10:40,470 --> 00:10:46,280
Lo primero que va a pasar es que Sergito la tarea se comienza a ejecutar, pero primero se a mostrar

145
00:10:46,290 --> 00:10:48,770
continuando con la ejecución del método Main 1.

146
00:10:49,080 --> 00:10:55,670
Luego se detiene o espera a que finalice la ejecución de la tarea y luego muestra este mensaje.

147
00:10:58,740 --> 00:10:59,380
Entonces, lo primero.

148
00:10:59,400 --> 00:11:04,980
Continuando con la ejecución del método Main 1, inicie la tarea, finaliza.

149
00:11:05,130 --> 00:11:06,030
Por lo tanto, se cierra.

150
00:11:06,030 --> 00:11:08,970
El ejecutor termina y luego continúa con la ejecución.

151
00:11:09,150 --> 00:11:09,630
2.

152
00:11:09,900 --> 00:11:10,470
Acá abajo.

153
00:11:11,370 --> 00:11:13,080
Qué pasa si esto lo comentamos?

154
00:11:14,130 --> 00:11:19,520
Bueno, va a parecer el 1 y el 2 acá arriba y luego se ejecuta la tarea porque tiene un delay.

155
00:11:19,740 --> 00:11:27,160
Recuerden que de forma asíncrona y en paralelo, por lo tanto continúa con la ejecución del main, continúa

156
00:11:27,180 --> 00:11:33,030
muestras todo mensaje por mientra en otro hilo, en otro proceso, se están ejecutando esta tarea con

157
00:11:33,030 --> 00:11:33,650
el ejecutor.

158
00:11:34,800 --> 00:11:38,310
Entonces vamos a levantar uno, dos, se fijan.

159
00:11:39,260 --> 00:11:44,870
Y luego, iniciando la tarea final de esa tarea, entonces la UAI termina hecho en espera a que finalice

160
00:11:44,870 --> 00:11:45,440
el proceso.

161
00:11:45,620 --> 00:11:48,910
Y deja como en una pausa la ejecución del método Main.

162
00:11:49,070 --> 00:11:50,390
Y cuando finaliza, continúa.

163
00:11:50,600 --> 00:11:56,420
Es decir, cuando finaliza la tarea y se termina, se cierra contacto con el ejecutor.

164
00:11:56,810 --> 00:11:58,680
O bien, si ocurre el time out.

165
00:11:58,790 --> 00:12:05,030
Por ejemplo, si finalmente se demora más en ejecutar la tarea que el time out, primero ocurre el tema

166
00:12:05,030 --> 00:12:05,290
out.

167
00:12:05,510 --> 00:12:06,770
Entonces ahí va a continuar.

168
00:12:07,250 --> 00:12:10,270
Por ejemplo, coloquemos acá cinco segundos.

169
00:12:11,570 --> 00:12:12,440
Entonces, qué va a pasar?

170
00:12:12,620 --> 00:12:13,730
Bueno, va a mostrar.

171
00:12:13,760 --> 00:12:16,460
Continuando con la ejecución del método Main 1.

172
00:12:16,490 --> 00:12:17,330
Perfecto.

173
00:12:17,540 --> 00:12:18,770
Luego para imprimir esto.

174
00:12:18,890 --> 00:12:21,050
Nombre del dret inicio de tarea.

175
00:12:21,140 --> 00:12:21,290
Bueno.

176
00:12:21,290 --> 00:12:21,710
En realidad.

177
00:12:21,800 --> 00:12:23,180
Inicio Tarea Nombre drid.

178
00:12:23,540 --> 00:12:26,120
Y después, continuando con la ejecución del método.

179
00:12:26,240 --> 00:12:27,830
Continúa y después finaliza.

180
00:12:28,190 --> 00:12:29,020
Al final va a mostrar.

181
00:12:29,030 --> 00:12:29,910
Finaliza la tarea.

182
00:12:30,830 --> 00:12:31,310
Veamos.

183
00:12:34,450 --> 00:12:40,120
Continuando la ejecución del método Main 1, iniciando la tarea nombre del Dredd, continuando con la

184
00:12:40,120 --> 00:12:42,310
ejecución del método Main 2.

185
00:12:42,400 --> 00:12:46,720
Claro, porque hoy ocurrió el time out de dwg de que se demora 5.

186
00:12:46,780 --> 00:12:48,040
Ocurre primero el té out.

187
00:12:48,340 --> 00:12:53,410
Por lo tanto, deja de esperar y continúa con el 2 y luego finaliza tarea.

188
00:12:53,530 --> 00:12:59,290
Cuando pasan los 5 segundos bien y quedamos hasta acá, seguimos en la siguiente clase.
