Bienvenidos.
Continuamos con el framework Executar de Java.
Qué parte del JDK permite ejecutar tareas de forma síncrona y concurrente?
Pero desacoplar completamente la creación de los dret.
Nosotros como desarrollador no tenemos que estar preocupándonos de crear instancias de lotería y pasar
nuestras tareas que implementa la interfaz RONDELL?
No, simplemente implementamos nuestras tareas y las asignamos al servicio al ejecutor.
Él se encarga de gestionar todos los herid.
El que era las instancias lo maneja, reutiliza algunos hilos que están disponible.
Optimiza también maneja un pool de Drizzt para nuestras tareas.
En fin, todo lo que es el ciclo de vida y creación de los hilos lo maneja este componente.
Una ventaja porque recuerden que crear un try es costoso en términos de memoria y acá todo eso se optimiza
y es mucho más limpio.
Solamente implementamos nuestras tareas con la interfaz Rodney, pero además podemos implementar tareas
que se le conoce como Implacables o Calabrese.
Qué diferencia de un Ranavalona retorna la tarea en ejecución que se está ejecutando como un objeto
futuro o uchos contiene la ejecución y eso nos permite administrar un poco la ejecución de nuestras
tareas.
Por ejemplo, saber si está en ejecución o si ya terminó.
Si fue cancelada, también la podemos cancelar.
En fin, un montón de características.
Entonces, para resumir, se encarga de crear un pull de hilos, reutilizarlo y llevar a cabo nuestras
tareas.
Vamos a trabajar.
Vamos a cerrar esto acá.
Vamos a crear un package acá en ílos New Package le vamos a llamar ejemplo execute.
Bien.
Y una clase con el método main acá de ejemplo.
Ejemplo executar.
Con el método Main
bien, hay dos interfaces importantes.
Dos implementaciones tenemos executar a Seca y executar servis difference, que este primero solamente
ejecuta una tarea con el método execute y pasamos una implementación, ya sea conlleva 8 una prisión
landa o una instancia de un roleplay, una implementación del método Rrán para hacer algo y la ejecutÃ
nada más.
Simplemente la ejecuta y moldeamos.
Mientras que el ejecutor service nos permite, además de ejecutar una tarea, hacer un seguimiento.
Tal como explicaba, en vez de utilizar el Ranavalona, podríamos utilizar el cable o Calheira implacable
y nos retorna la tarea que se está ejecutando como un objeto del tipo futuro o chor.
Y ahí la podemos manejar, administrar, cancelar, saber si esta ejecución se ha finalizado.
En fin, un montón de cosas que podemos implementar vamos a utilizar execute ourselves.
Exequiel autor o ejecutor en español?
Bueno, acá no tenemos que crear ninguna instancia a través de una clase de fabrica o Factory, una
factoría que se encarga de crear instancias del ejecutor servis con diferentes implementaciones a través
de la clase Ezequiel Hathors en plural.
Entonces esta la clase de utilidad o fábrica que nos permite crear instancias con el new se fijan son
método estático de diferentes implementaciones.
Por ejemplo la típica en New Shinki tried executar para ejecutar un único grid es un pull de uno solo
maneja una sola instancia.
De esta forma podemos ejecutar varias tareas una detrás de otra.
Primero tiene que terminar una para ejecutar la siguiente.
Otra forma es el new fixed de Red Bull y acá sí que nos permite pasar por el método.
Acá un entero con el tamaño del pull, por ejemplo, que maneje 5 drid, un poule, 5 Drizzt para toda
nuestra tarea y él se encarga de asignar nuestras tareas a estos herid que están disponibles, disponible
o que tenga que crear, pero siempre maneja.
5 y si tenemos muchas tareas, por ejemplo, si el pool es de 5 y tenemos 10 tarea primero va a dejar
5 ejecutándose al mismo tiempo y el resto en cola esperando a que finalicen.
Y cuando finaliza una se van asignando las demás tareas a los Dredd que están quedando disponible o
que se están ocupando para partir.
Vamos a utilizar new single dret executar.
El más simple.
Bien, hoy tenemos a nuestro ejecutor.
Vamos a tener una tarea simple roleplay, tarea y lo vamos a implementar con expresiones lambda.
Entonces con los paréntesis del método rrán, las llaves y la implementación, aunque también, como
hemos visto, puede ser una clase que implementa la interfaz red nivel y ahí implementar en el método
RAM nuestra tarea.
Inicio de la tarea.
Bien, está comenzando para simular una tarea con un delay, con una carga, con un trabajo pesado,
por ejemplo, una consulta.
Hace rato vamos a utilizar un Dredd Sleep, pero también podemos utilizar otra forma.
La vamos a ver ahora.
Es como una alternativa al Tirith Sleep utilizando la clase Time y UNIT y acá seleccionamos la cantidad
en tiempo o la unidad de tiempo, por ejemplo, segundos o milisegundos, minutos, horas, lo que sea.
Nanosegundos.
Vamos a seleccionar segundos.
Punto Sleep se fijan muy parecido al 3 Leap.
De hecho hace un sleep al hilo actual por detrás de escena.
Es lo mismo que Dret es lipa, pero más automatizado porque ya maneja la conversión de tiempo.
Por ejemplo, sicologo acá 1 corresponde a un segundo, ya que seleccionamos acá seconds.
Si acá hubiésemos colocado 1000 seconds o milisegundo, acá colocamos 1000 1000 milisegundos para hacer
referencia a un segundo de una forma más simple para manejar unidad de tiempo.
Ben y el Sleep al igual que el Tirith Sleep acá no pide manejar el trait catch.
Perfecto.
Y en caso de que se interrumpa, vamos a colocar acá Dredd Punto Carrá en Tried y le invocamos el método
interruptor para interrumpir la ejecución del Tirith actual.
Aunque esto es opcional, pero en caso de que se detenga el extractor servis, después vamos a ver que
se puede tener de forma abrupta la ejecución con chat down now.
Después vamos a ver, pero acá se interrumpe la ejecución.
Iba a lanzar esta sección interrumpe Exception y podemos interrumpir el hilo actual y de esa forma se
libera.
Despertamos el Sleep.
Ven acá tenemos entonces la tarea.
Inicio la tarea acá simulamos algún tipo de trabajo.
También podemos imprimir el nombre del Drizzt,
contribuir con el Carret.
Dredd puntos get name y después acá.
Al final finaliza la tarea.
Ahora tenemos que registrar esta tarea al ejecutor.
Acá le puse, acá me comí la e executar.
En realidad, aunque lo vimos nombre variable executar punto.
Acá tenemos el método submit o enviar, enviar una tarea o registrar.
Acá podemos recibir un neighbors, una tarea común y corriente que hemos visto, pero también un calibre
o calabrese, que también es una implementación de tarea, pero como aplicaba, devuelve el resultado
en tipo futuro.
Entonces la diferencia es que acá podemos retornar algún valor.
Es un valor futuro que se retorna, se devuelve.
Una vez que finaliza la tarea bien submit y pasamos la tarea, vamos a levantar.
Recuerden que hace un sleep de un segundo se fijan inicio la tarea nombre del Drizzt finaliza la tarea,
pero se mantiene en ejecución porque el ejecutor no ha finalizado, no se ha terminado y lo tenemos
que detener porque si no nuestra aplicación sigue corriendo.
Entonces acá vamos a colocar un stop.
Solamente para que lo vean y finalizamos el proceso.
Ahora, fíjense bien, voy a colocar un punto chat donde diga que tenemos dos versiones, dos forma
mencioné por ahí el chat Down Now lo que hace es apagar de forma abrupta.
El ejecutor lo cierra y las tareas que están pendientes o que se están ejecutando quedan interrumpidas,
quedan a medio camino y podría ser un problema.
Podría quedar ambiguo la ejecución de estos procesos, inconsistente con la información, con los datos
que se están procesando, mientras que Jot Down es mucho mejor porque lo que hace es apagar una vez
que finaliza la ejecución de toda la tarea que se están ejecutando en este momento.
Pero también los que están en cola espera a que también se ejecuten y una vez que se haya realizado
todas las tareas tanto en ejecución actualmente como en la cola realiza el CHADDHA se apaga.
Ahora si vamos a levantar, vamos a ver la diferencia.
Inicio Tarea Nombre Eldred Finalizar la tarea Lleca finaliza nuestra aplicación.
Ya no tengo que detenerla, simplemente finaliza.
Entonces siempre es Yata, tiene que ir.
También tenemos otro método ejecutor punto a wait termina hecho.
Entonces lo que hace es esperar a que finalicen todas las tareas y luego que se detenga el ejecutor
para continuar con la ejecución del método main o del hilo principal y que tenga que pasar un time out,
por ejemplo, de 2 segundo.
Y como segundo argumento vamos a colocar la unidad a tiempo en segundos, por ejemplo.
Entonces Taime UNIT punto seconds.
Y ahora tenemos que manejar el troi catch o lanzar la excepción por el método.
Vamos a colocar lanzar la sección en la firma el método del método Main.
Acá se fijan lanza interruptor Exception ve como explicaba.
Espera a que finalice la ejecución de las tareas para continuar con la ejecución del método main del
método principal.
Y pueden ocurrir dos eventos una, que finalice todas las tareas sin ningún problema y se cierra el
ejecutor o bien que ocurra el time out.
Bien, acabo de colocar un mensaje Shout para que sea más claro.
Continuando con la ejecución del main.
Del método Amén.
Perfecto.
Voy a colocar acá uno y acá dos.
Lo primero que va a pasar es que Sergito la tarea se comienza a ejecutar, pero primero se a mostrar
continuando con la ejecución del método Main 1.
Luego se detiene o espera a que finalice la ejecución de la tarea y luego muestra este mensaje.
Entonces, lo primero.
Continuando con la ejecución del método Main 1, inicie la tarea, finaliza.
Por lo tanto, se cierra.
El ejecutor termina y luego continúa con la ejecución.
2.
Acá abajo.
Qué pasa si esto lo comentamos?
Bueno, va a parecer el 1 y el 2 acá arriba y luego se ejecuta la tarea porque tiene un delay.
Recuerden que de forma asíncrona y en paralelo, por lo tanto continúa con la ejecución del main, continúa
muestras todo mensaje por mientra en otro hilo, en otro proceso, se están ejecutando esta tarea con
el ejecutor.
Entonces vamos a levantar uno, dos, se fijan.
Y luego, iniciando la tarea final de esa tarea, entonces la UAI termina hecho en espera a que finalice
el proceso.
Y deja como en una pausa la ejecución del método Main.
Y cuando finaliza, continúa.
Es decir, cuando finaliza la tarea y se termina, se cierra contacto con el ejecutor.
O bien, si ocurre el time out.
Por ejemplo, si finalmente se demora más en ejecutar la tarea que el time out, primero ocurre el tema
out.
Entonces ahí va a continuar.
Por ejemplo, coloquemos acá cinco segundos.
Entonces, qué va a pasar?
Bueno, va a mostrar.
Continuando con la ejecución del método Main 1.
Perfecto.
Luego para imprimir esto.
Nombre del dret inicio de tarea.
Bueno.
En realidad.
Inicio Tarea Nombre drid.
Y después, continuando con la ejecución del método.
Continúa y después finaliza.
Al final va a mostrar.
Finaliza la tarea.
Veamos.
Continuando la ejecución del método Main 1, iniciando la tarea nombre del Dredd, continuando con la
ejecución del método Main 2.
Claro, porque hoy ocurrió el time out de dwg de que se demora 5.
Ocurre primero el té out.
Por lo tanto, deja de esperar y continúa con el 2 y luego finaliza tarea.
Cuando pasan los 5 segundos bien y quedamos hasta acá, seguimos en la siguiente clase.