Veamos cómo implementar una tarea programada, pero que se vaya repitiendo en el tiempo de forma periódica.
Bien, vamos a cerrar acá.
Vamos a copiar esta misma clase porque la vamos a modificar, la pegamos acá.
Ejemplo Timmer.
Control B.
Le colocamos período, es decir, que se repita de forma periódica es lo mismo.
La vamos a modificar.
Entonces, el siguiente paso es agregar como tercer argumento en el método Quedarles.
Acá cada cuánto tiempo se va a repetir?
Bueno, comienza con un delay de cinco segundos, pero después de eso se ejecuta la primera tarea y
después se tienen que repetir en un intervalo tiempo.
Por ejemplo, cada 20 segundos, cada diez segundos.
Entonces vamos a colocar 10 000.
Ahora, qué pasa si una tarea se demoró o la primera se demoró más de diez segundos?
Bueno, no importa.
Se va a acomodar de forma automática cuando finaliza la primera tarea.
Después se demora más de los 10 segundos, se ejecuta la siguiente y así sucesivamente.
Pero el intervalo tiempo que asegura son diez segundos entre una y otra.
Si no se acomoda.
Así que no hay ningún problema.
Bien.
Pero si esto lo ejecutamos, se va a ejecutar hasta el final de los tiempos de forma indefinida.
Y tenemos que controlar eso porque por ejemplo, bueno, primero voy a modificar un poco el texto.
Tarea realizada en la fecha nombre Eldritch perfecto.
Finaliza el tiempo ya.
Primero, tarea realizada en vez de realizada le vamos a colocar periódica periódica.
La fecha nombre del Dredd perfecto finaliza el tiempo ya.
Esto lo tengo que comentar porque si no lo comento como se repite la primera vez, se va a cancelar
y se va a salir.
De hecho lo podríamos ver ejecutemos con el Timmer Cancer a pesar de que se tiene que repetir cada segundo,
pero si lo colocamos y no lo comentamos se va a salir.
A quién damos la tarea para cinco segundos más?
Comienza la primera y se sale porque pusimos cancel.
Se fija.
Entonces se tiene que comentar esto.
Ahora si.
Adjuntamos una tarea para cinco segundos más después.
Bueno, se hace la tarea, pero no finaliza, se fijan.
Y se vuelve a repetir en diez segundos más por el intervalo de tiempo que le pusimos acá.
Entonces cada diez segundos se vuelve a repetir y así va estar indefinidamente.
Entonces tenemos que controlar con alguna variable, algún contador o manejo de cuando ocurre un error.
En fin, ahora quizás muchas veces nuestra implementación puede que sea un servicio que lo ejecutamos
de forma indefinida hasta que bajemos el servicio de nuestra aplicación en el sistema operativo.
Por ejemplo, un cron job, pero en nuestro caso lo tenemos que manejar con alguna variable.
Es decir, que se ejecute tantas veces y después finalizamos porque si no va a estar indefinidamente
ejecutándose.
Vamos a cancelar.
Esto sería una forma de detener nuestra aplicación con stop.
Finaliza con el código menos uno de forma abrupta.
Y bien, comenzamos.
Necesitamos un contador, una bandera.
Y fíjense bien, vamos a utilizar un entero o un Integer contador igual 3.
Pero acá vamos a tener un problema.
El tema que acá estamos implementando el vuelo.
Una clase anónima y no podemos utilizar una variable externa dentro de una implementación interna de
una clase anónima.
Pero bien, veamos el contexto.
Voy a tratar de utilizar el IF no cierto y que la tarea se ejecute tres veces.
Entonces, mientras el contador sea mayor que cero, que se ejecute entonces contador mayor que cero.
Hasta acá nomás, porque finaliza el tiempo sería parte del els.
Els es toda can.
Si es mayor que cero, perfecto esto, pero si es igual a cero, es decir, ya se consumieron las tres
veces.
Deberíamos implementar esto y cerrar.
Cancelar el Timmer.
Salirnos finaliza el tiempo, pero tenemos que decretar cada vez que se ejecuta una tarea incrementando
el contador.
Entonces acá contador menos, menos incrementamos y acá tenemos el problema variable.
Contador es accesible desde dentro de una clase.
Pero para eso tienen que ser final.
Tiene que ser final.
Pero acá estamos modificando.
Y si cambiamos a final, acá final no podemos modificar un atributo variable que sea final, porque
una constante.
Por lo tanto, cada marca error.
Es decir, no podemos utilizar un entero acá fican fuera de la implementación del Taime Task.
De esta clase anónima.
Entonces hay diferentes soluciones.
Una cortar esto y lo podríamos dejar acá como un atributo de la clase Jassi.
Después vamos a ver otra forma que mejor todavía que si la podemos utilizar afuera.
Pero por ahora lo dejamos así.
Entonces.
Un atributo private entero contador que parte de la implementación al vuelo.
Acá decretamos preguntamos y cuando llega a cero por el decremento va acrecentando en uno y después
de tres veces finaliza el tiempo y cancelamos y nos salimos.
Entonces es una forma de controlar.
Veamos, vamos a levantar.
Arrendamos una tarea para cinco segundos más que se va a repetir.
Tarea periódica en nombre del Dredd perfecto, hallamos una.
Hay que esperar diez segundos más para la segunda hay la segunda.
Hay otra tercera.
Y finaliza y se sale.
Se eligen de esta forma controlamos el timer incluso que podríamos colocar tarea periódica.
Contador.
Vamos a abajar porque muestra el número de la tarea de tarea 1, tarea 2, tarea 3 o tarea 3 tarea 2
tarea 1 porque se va acrecentando, pero había dicho que hay otra forma en vez de utilizar contador.
Acá está otra alternativa que también funciona.
Vamos a colocar Atomic in Tellas.
Acá podemos utilizar de forma concurrente ir incrementando este valor numérico entero, pero de forma
atómica y sin bloqueo, y además se va a utilizar dentro de una implementación del Timer Task.
Contador atómico igual.
New Atomic Integer.
Le pasamos el valor 3.
Bien, está acá, lo podemos comentar todo acá lo comentamos el decremento ya no necesario y en vez
de utilizar contador de este atributo, utilizamos contador atómica y acá tenemos el método get and
decremento, es decir, obtener incremental.
Pero esto lo podríamos hacer afuera mejor.
Por ejemplo, acá entero y un área el auxiliar lo obtenemos, incrementamos y acá utilizamos y.
Y esta de Halden, porque acá pasamos el valor y luego se decremento.
Llegaa utilizamos.
Se fijan otra identidad utilizando Atomic in Tellas ya le podemos tener afuera.
Vamos a levantar.
Es que tenemos una tarea para cinco segundos más.
3.
Periódica y comienza vale 3.
Después va a valer 2.
Balaidos.
Vale 1.
Y finaliza.
Se sale otra alternativa.
Entonces ya esto lo podremos quitar.
No es necesario, pero son diferentes opciones también.
Si queremos que comience de forma inmediata, sin ningún delay, en vez de 5000, colocamos cero, debe
partir inmediatamente.
Se fijan en quién te manda tarea para cinco segundos más en realidad?
Bueno, para cero segundos más, pero se va repitiendo tarea atrás de Platería 2 hasta la última, la
1 y finaliza.
También pueden utilizar algún tipo de sonido de alerta cada que se ejecuta una tarea.
Esto es un plus, nada más.
Toolkit del package ya va a doble Bete Turquito, igual la clase Turquito, el método estático Get default
Turquito, listo.
Y acá lo podemos utilizar.
Por ejemplo, cada vez que entramos a una tarea emitir un sonido beep el famoso sonido del sistema operativo,
entonces parte con un dilas cero inmediata.
Que se repite cada 10 segundos.
Explica si se colocan audifono o co parlantes van a escuchar el sonido de Windows, el beep.
La segunda tarea y después la tercera tarea.
Y finaliza y nos salimos bien.
Nada más.
Continuamos en la siguiente clase.