SlideShare una empresa de Scribd logo
Timer and TimerTask Classes
La clase java.util.Timer es usada para
crear un hilo que se ejecuta basado en
planificación.
Las tareas pueden ser planificadas para
unas corridas sencillas en un tiempo
específico o para que corran durante
cierto periodo de tiempo transcurrido.
Timer and TimerTask Classes
Un simple objeto Timer puede administrar
cualquier número de tareas planificadas.
Timer and TimerTask Classes
Cada tarea es creada escribiendo una clase que
extiende a la clase java.util.TimerTask.
La clase TimerTask implementa a Runnable,
pero no implementa el método run().
La clase hija de TimerTask define el método
run() y cuando la tarea es planificada para
correr, su método run() es invocado.
Timer and TimerTask Classes
Mostremos un ejemplo sencillo para
ilustrar como estas dos clases se utilizan
juntas para crear un hilo.
En este ejemplo, suponga que tiene un
programa que usa intensivamente la
memoria que frecuentemente reserva y
libera memoria.
Timer and TimerTask Classes
El colector de basura esta constantemente
trabajando en trasfondo; pero UD. puede
invocar el método System.gc() para forzar la
recolección de basura inmediata.
En lugar de tratar de colocar llamados a
System.gc() a lo largo de su programa, UD.
desea crear una tarea planificada que invoque
este método cada cinco segundos.
Timer and TimerTask Classes
El siguiente programa GCTask corre el
colector de basura y se asegura de que el
programa TimerDemo cree un Timer y
planifique la tarea para repetirla cada
cinco segundos.
import java.util.TimerTask;
public class GCTask extends TimerTask
{
public void run()
{
System.out.println("Running the scheduled task...");
System.gc();
}
}
import java.util.Timer;
public class TimerDemo{
public static void main(String [] args){
Timer timer = new Timer();
GCTask task = new GCTask();
timer.schedule(task, 5000, 5000);
int counter = 1;
while(true){
new SimpleObject("Object" + counter++);
try{
Thread.sleep(500);
}catch(InterruptedException e){}
}
}
}
Timer and TimerTask Classes
Veamos lo siguiente acerca de este
ejemplo:
 La clase GCTask extiende a la clase
TimerTask e implementa el método run().
 Dentro del programa TimerDemo, un objeto
Timer y un objeto GCTask son instanciado.
Timer and TimerTask Classes
 Usando un objeto Timer el objeto tarea es
planificado usando el método schedule() de
la clase Timer para que se ejecute después
de cada cinco segundos de espera y luego
continúe su ejecución cada cinco segundos.
 El bucle infinito while dentro del método
main() instancia objetos de tipo
SimpleObject los cuales están disponible
para el colector de basura.
SimpleObject.java
public class SimpleObject
{
private String name;
public SimpleObject(String n)
{
System.out.println("Instantiating " + n);
name = n;
}
public void finalize()
{
System.out.println("*** " + name + " is getting garbage collected ***");
}
}
Timer and TimerTask Classes
La clase SimpleObject sobre escribe al método
finalize() y despliega un mensaje. ( Avisando
que el método finalize() es invocado por el
recolector de basura antes de que la memoria
sea liberada.)
Observe que siempre que el hilo main() esta
durmiendo, los objetos no son recolectados por
el recolector de basura hasta que GCTask es
sheduled por el timer, el cual invoca al método
System.gc(). Esta conducta depende de la JVM.
Scheduling Tasks
Las tareas que se repiten le son asignados
períodos que denotan el tiempo entre las
ejecuciones y estas caen en dos categorías:
 Fixed-delay-execution. El período es la
cantidad de tiempo entre el fin de la ejecución
previa y el inicio de la nueva ejecución.
 Fixed-rate-execution. El periodo es la
cantidad de tiempo entre el inicio de la
ejecución previa y el inicio de la nueva
ejecución.
Scheduling Tasks
Por ejemplo, la tarea GCTask en el programa
TimerDemo es una tarea fixed-delay con un
periodo de cinco segundos, lo cual significa que
el periodo de cinco segundos inicia después de
que termina la tarea actual.
Scheduling Tasks
La tarea fixed-rate es planificada cada cinco
segundos, sin importar cuanto ha demorado la
tarea previa para ejecutarse. Si la tarea
previamente planificada no ha finalizado aún,
las subsecuentemente tareas se ejecutarán en
una sucesión rápida.
Fixed-rate-scheduling es ideal cuando UD. tiene
tareas que son sensitivas al tiempo, tales como
una aplicación remanente o un reloj.
Scheduling Tasks
Cada método schedule() puede lanzar una
excepción del tipo IllegalStateException si la
tarea ya ha sido planificada.
Un objeto TaskTimer puede ser planificado sólo
una vez. Si se necesita repetir una tarea, Ud.
debe planificar una nueva instancia de su clase
TimerTask.
Scheduling Tasks
La clase java.util.Timer contiene los siguientes
métodos para planificar un TimeTask:
 public void schedule( TimerTask task, Date
time ). Planifica una tarea para una ejecución
sencilla en el tiempo especificado. Si el tiempo ha
pasado ya, la tarea será planificada inmediatamente.
Si la tarea ya ha sido planificada, una excepción del
tipo IllegalStateException es lanzada.
Scheduling Tasks
 public void schedule( TimerTask task, long
delay). Planifica una tarea para una ejecución
sencilla después que la pausa especificada ha
terminado.
 public void schedule( TimerTask task, long
delay , long periodo). Planifica una tarea para fixed-
delay-execution. Los parámetros de pausa
representan la cantidad de tiempo que debe esperar
hasta la primera ejecución, los cuales pueden ser
diferenciados del periodo en que este fue planificado
para correr.
Scheduling Tasks
 public void schedule( TimerTask task, Date
firstTime , long period). Planifica una tarea para
fixed-delay-execution. El parámetro Date representa
el tiempo de la primera ejecución.
 public void scheduleAtFixedRate( TimerTask
task, long delay, long period). Planifica una tarea
para fixed-delay-execution. El parámetro delay
representa la cantidad de tiempo que debe esperar
hasta la primera ejecución, el cual puede ser
diferenciado del periodo en que este duró durante su
ejecución.
Scheduling Tasks
 public void scheduleAtFixedRate( TimerTask task,
Date firstTime, long period). Planifica una tarea
para fixed-delay-execution. El parámetro Date
representa la cantidad de tiempo que debe esperar
hasta la primera ejecución,
Scheduling Tasks
Cada método schedule() toma el tiempo de
inicio y el tiempo de espera ( la cantidad de
tiempo antes de la primera ejecución
planificada).
Cada método tiene un parámetro TimerTask
para representar el código que corre cuando la
tarea es planificada. La clase TimerTask tiene
tres métodos:
Scheduling Tasks
La clase TimerTask tiene tres métodos:
 public abstract void run(). El método es invocado
por Timer. Note que este método es abstract y por
eso debe ser sobrescrito en la clase hija.
 public boolean cancel(). Cancela la tarea de tal
manera que esta nunca volverá a correr de nuevo. Si
la tarea esta corriendo actualmente, su ejecución
actual será finalizada. El método retorna true si la
próxima tarea planificada fue cancelada.
Scheduling Tasks
 public long scheduledExecutionTime(). Retorna
el tiempo en el cual la más reciente ejecución de la
tarea fue planificada para que ocurriera. Este
método es útil para tareas fixed-delay, cuando el
tiempo de planificación varía.
Scheduling Tasks
Por ejemplo, la siguiente sentencia if verifica si
la ejecución de una tarea toma más de tres
segundos. Si esto ha ocurrido esta ejecución
voluntariamente evita que corra simplemente
retorna del método run()
if( System.currentTimeMillis() – this.scheduledExcecutionTime() >= 3000 )
{
System.out.println(“Previus execution took too long “);
}
Scheduling Tasks
Para demostrar una fixed-rate execution.
La siguiente clase usa la tarea
PhoneRinger para simular el timbrado de
un teléfono, con un periodo de tres
segundos.
import java.util.TimerTask;
public class PhoneRinger extends TimerTask{
int counter;
public PhoneRinger(){
counter = 0;
}
public void run(){
counter++;
System.out.println("Ring " + counter);
}
public int getRingCount(){
return counter;
}
}
import java.util.Timer;
public class Phone
{
private boolean ringing;
private PhoneRinger task;
private Timer timer;
public Phone()
{
timer = new Timer(true);
}
public boolean isRinging()
{
return ringing;
}
public void startRinging()
{
ringing = true;
task = new PhoneRinger();
timer.scheduleAtFixedRate(task, 0, 3000);
}
public void answer()
{
ringing = false;
System.out.println("Phone rang " +
task.getRingCount() + " times");
task.cancel();
}
public static void main(String [] args)
{
Phone phone = new Phone();
phone.startRinging();
try
{
System.out.println("Phone started ringing...");
Thread.sleep(20000);
}catch(InterruptedException e)
{}
System.out.println("Answering the phone...");
phone.answer();
}
}
Chap 15cpin
Scheduling Tasks
Hagamos algunos comentarios acerca de las
clases PhoneRinger y Phone:
 La clase PhoneRinger es una tarea TimerTask que
mantiene el registro del número de rings y despliega
un mensaje sencillo en el método run().
 La clase Phone instancia un demonio Timer ,así que
el Timer no mantiene corriendo la aplicación.
Scheduling Tasks
 Cada vez que el método startRinging() es invocado
para simular una nueva llamada entrante, un nuevo
objeto PhoneRinger es instanciado. Ud. no puede
volver a usar el objeto PhoneRinger previo por que
una tarea no puede ser replanificada.
 Cuando el teléfono es contestado, la tarea es
cancelada ( pero no el Timer ). Esto significa que la
tarea no se ejecutará nuevamente, lo cual en nuestro
ejemplo significa que el teléfono no volverá a sonar
nuevamente.

Más contenido relacionado

PPTX
Chap 15apin
PPTX
Chap 15bpin
PPTX
Chap 15fpin
PPTX
Chap 15epin
PPTX
Chap 15dpin
PPTX
2o departamental Programacion 3
PPTX
Chap 15gpin
Chap 15apin
Chap 15bpin
Chap 15fpin
Chap 15epin
Chap 15dpin
2o departamental Programacion 3
Chap 15gpin

La actualidad más candente (19)

PDF
Tema 12 hilos en java por gio
PPT
Programando en java
DOCX
Multitarea e hilos en java con ejemplos
PPTX
Hilos – threads en java
PPT
Threads en Java
PPTX
Multitarea e hilos en java
PDF
Java Threads (Hilos en Java)
PPT
Programación III (Java) - 08 threads
PPTX
Programación multitarea
PPTX
Uso de hilos
PDF
Programacion concurrente
PDF
Clase9 threads
PDF
Uso de Excepciones en JAVA
PDF
Thread group demonios- parte1
DOC
Guia1 programacion de-procesos_concurrentes-hilos
PDF
Programación multihebra en java
ODP
PCJ Sesión 9: Threads
PDF
PDF
Tema 12 hilos en java por gio
Programando en java
Multitarea e hilos en java con ejemplos
Hilos – threads en java
Threads en Java
Multitarea e hilos en java
Java Threads (Hilos en Java)
Programación III (Java) - 08 threads
Programación multitarea
Uso de hilos
Programacion concurrente
Clase9 threads
Uso de Excepciones en JAVA
Thread group demonios- parte1
Guia1 programacion de-procesos_concurrentes-hilos
Programación multihebra en java
PCJ Sesión 9: Threads
Publicidad

Similar a Chap 15cpin (20)

PPT
9.animaciones
PPT
Tarea Repetible
DOCX
Colaborativo_Nelis Rivero
PPTX
Sistemas operativos unidad 2
DOCX
Manuales ...
PPT
Junit y Jmock
PPTX
Java 8 time to join the future
DOC
Balancedelinea 101031201811-phpapp02
PDF
Algoritmos - Funciones C++
PPTX
Concurrencia en Java
PDF
Programación de-operaciones
PDF
DefinicionExplicacionEjemplosdeHilosenJava
PDF
19189723 estructura-de-datos-programacion-facil
PDF
Tema 9 pruebas unitarias por gio
PDF
So procesos-planif
DOCX
Round robin apa
DOCX
Colaborativo_Nelis Rivero
PPT
6 Upv Solo Pruebas 2009
DOCX
Material-Lab-2-Trabajo-con-hilos.docx.............
9.animaciones
Tarea Repetible
Colaborativo_Nelis Rivero
Sistemas operativos unidad 2
Manuales ...
Junit y Jmock
Java 8 time to join the future
Balancedelinea 101031201811-phpapp02
Algoritmos - Funciones C++
Concurrencia en Java
Programación de-operaciones
DefinicionExplicacionEjemplosdeHilosenJava
19189723 estructura-de-datos-programacion-facil
Tema 9 pruebas unitarias por gio
So procesos-planif
Round robin apa
Colaborativo_Nelis Rivero
6 Upv Solo Pruebas 2009
Material-Lab-2-Trabajo-con-hilos.docx.............
Publicidad

Último (20)

PDF
Híper Mega Repaso Histológico Bloque 3.pdf
PDF
ACERTIJO Súper Círculo y la clave contra el Malvado Señor de las Formas. Por ...
PDF
el - LIBRO-PACTO-EDUCATIVO-GLOBAL-OIEC.pdf
PDF
Salvese Quien Pueda - Andres Oppenheimer Ccesa007.pdf
PDF
benveniste-problemas-de-linguistica-general-i-cap-6 (1)_compressed.pdf
PDF
Lección 6 Escuela Sab. A través del mar rojo.pdf
PDF
COMUNICACION EFECTIVA PARA LA EDUCACION .pdf
PDF
Romper el Circulo de la Creatividad - Colleen Hoover Ccesa007.pdf
PDF
Cronograma de clases de Práctica Profesional 2 2025 UDE.pdf
PDF
biología es un libro sobre casi todo el tema de biología
PDF
Escuela Sabática 6. A través del Mar Rojo.pdf
PDF
Habitos de Ricos - Juan Diego Gomez Ccesa007.pdf
DOCX
2 GRADO UNIDAD 5 - 2025.docx para primaria
PDF
COMPLETO__PROYECTO_VIVAN LOS NIÑOS Y SUS DERECHOS_EDUCADORASSOS.pdf
PDF
Salcedo, J. et al. - Recomendaciones para la utilización del lenguaje inclusi...
PDF
SESION 12 INMUNIZACIONES - CADENA DE FRÍO- SALUD FAMILIAR - PUEBLOS INDIGENAS...
PDF
IDH_Guatemala_2.pdfnjjjkeioooe ,l dkdldp ekooe
PDF
PFB-MANUAL-PRUEBA-FUNCIONES-BASICAS-pdf.pdf
PDF
Unidad de Aprendizaje 5 de Educacion para el Trabajo EPT Ccesa007.pdf
PDF
Escuelas Desarmando una mirada subjetiva a la educación
Híper Mega Repaso Histológico Bloque 3.pdf
ACERTIJO Súper Círculo y la clave contra el Malvado Señor de las Formas. Por ...
el - LIBRO-PACTO-EDUCATIVO-GLOBAL-OIEC.pdf
Salvese Quien Pueda - Andres Oppenheimer Ccesa007.pdf
benveniste-problemas-de-linguistica-general-i-cap-6 (1)_compressed.pdf
Lección 6 Escuela Sab. A través del mar rojo.pdf
COMUNICACION EFECTIVA PARA LA EDUCACION .pdf
Romper el Circulo de la Creatividad - Colleen Hoover Ccesa007.pdf
Cronograma de clases de Práctica Profesional 2 2025 UDE.pdf
biología es un libro sobre casi todo el tema de biología
Escuela Sabática 6. A través del Mar Rojo.pdf
Habitos de Ricos - Juan Diego Gomez Ccesa007.pdf
2 GRADO UNIDAD 5 - 2025.docx para primaria
COMPLETO__PROYECTO_VIVAN LOS NIÑOS Y SUS DERECHOS_EDUCADORASSOS.pdf
Salcedo, J. et al. - Recomendaciones para la utilización del lenguaje inclusi...
SESION 12 INMUNIZACIONES - CADENA DE FRÍO- SALUD FAMILIAR - PUEBLOS INDIGENAS...
IDH_Guatemala_2.pdfnjjjkeioooe ,l dkdldp ekooe
PFB-MANUAL-PRUEBA-FUNCIONES-BASICAS-pdf.pdf
Unidad de Aprendizaje 5 de Educacion para el Trabajo EPT Ccesa007.pdf
Escuelas Desarmando una mirada subjetiva a la educación

Chap 15cpin

  • 1. Timer and TimerTask Classes La clase java.util.Timer es usada para crear un hilo que se ejecuta basado en planificación. Las tareas pueden ser planificadas para unas corridas sencillas en un tiempo específico o para que corran durante cierto periodo de tiempo transcurrido.
  • 2. Timer and TimerTask Classes Un simple objeto Timer puede administrar cualquier número de tareas planificadas.
  • 3. Timer and TimerTask Classes Cada tarea es creada escribiendo una clase que extiende a la clase java.util.TimerTask. La clase TimerTask implementa a Runnable, pero no implementa el método run(). La clase hija de TimerTask define el método run() y cuando la tarea es planificada para correr, su método run() es invocado.
  • 4. Timer and TimerTask Classes Mostremos un ejemplo sencillo para ilustrar como estas dos clases se utilizan juntas para crear un hilo. En este ejemplo, suponga que tiene un programa que usa intensivamente la memoria que frecuentemente reserva y libera memoria.
  • 5. Timer and TimerTask Classes El colector de basura esta constantemente trabajando en trasfondo; pero UD. puede invocar el método System.gc() para forzar la recolección de basura inmediata. En lugar de tratar de colocar llamados a System.gc() a lo largo de su programa, UD. desea crear una tarea planificada que invoque este método cada cinco segundos.
  • 6. Timer and TimerTask Classes El siguiente programa GCTask corre el colector de basura y se asegura de que el programa TimerDemo cree un Timer y planifique la tarea para repetirla cada cinco segundos.
  • 7. import java.util.TimerTask; public class GCTask extends TimerTask { public void run() { System.out.println("Running the scheduled task..."); System.gc(); } }
  • 8. import java.util.Timer; public class TimerDemo{ public static void main(String [] args){ Timer timer = new Timer(); GCTask task = new GCTask(); timer.schedule(task, 5000, 5000); int counter = 1; while(true){ new SimpleObject("Object" + counter++); try{ Thread.sleep(500); }catch(InterruptedException e){} } } }
  • 9. Timer and TimerTask Classes Veamos lo siguiente acerca de este ejemplo:  La clase GCTask extiende a la clase TimerTask e implementa el método run().  Dentro del programa TimerDemo, un objeto Timer y un objeto GCTask son instanciado.
  • 10. Timer and TimerTask Classes  Usando un objeto Timer el objeto tarea es planificado usando el método schedule() de la clase Timer para que se ejecute después de cada cinco segundos de espera y luego continúe su ejecución cada cinco segundos.  El bucle infinito while dentro del método main() instancia objetos de tipo SimpleObject los cuales están disponible para el colector de basura.
  • 11. SimpleObject.java public class SimpleObject { private String name; public SimpleObject(String n) { System.out.println("Instantiating " + n); name = n; } public void finalize() { System.out.println("*** " + name + " is getting garbage collected ***"); } }
  • 12. Timer and TimerTask Classes La clase SimpleObject sobre escribe al método finalize() y despliega un mensaje. ( Avisando que el método finalize() es invocado por el recolector de basura antes de que la memoria sea liberada.) Observe que siempre que el hilo main() esta durmiendo, los objetos no son recolectados por el recolector de basura hasta que GCTask es sheduled por el timer, el cual invoca al método System.gc(). Esta conducta depende de la JVM.
  • 13. Scheduling Tasks Las tareas que se repiten le son asignados períodos que denotan el tiempo entre las ejecuciones y estas caen en dos categorías:  Fixed-delay-execution. El período es la cantidad de tiempo entre el fin de la ejecución previa y el inicio de la nueva ejecución.  Fixed-rate-execution. El periodo es la cantidad de tiempo entre el inicio de la ejecución previa y el inicio de la nueva ejecución.
  • 14. Scheduling Tasks Por ejemplo, la tarea GCTask en el programa TimerDemo es una tarea fixed-delay con un periodo de cinco segundos, lo cual significa que el periodo de cinco segundos inicia después de que termina la tarea actual.
  • 15. Scheduling Tasks La tarea fixed-rate es planificada cada cinco segundos, sin importar cuanto ha demorado la tarea previa para ejecutarse. Si la tarea previamente planificada no ha finalizado aún, las subsecuentemente tareas se ejecutarán en una sucesión rápida. Fixed-rate-scheduling es ideal cuando UD. tiene tareas que son sensitivas al tiempo, tales como una aplicación remanente o un reloj.
  • 16. Scheduling Tasks Cada método schedule() puede lanzar una excepción del tipo IllegalStateException si la tarea ya ha sido planificada. Un objeto TaskTimer puede ser planificado sólo una vez. Si se necesita repetir una tarea, Ud. debe planificar una nueva instancia de su clase TimerTask.
  • 17. Scheduling Tasks La clase java.util.Timer contiene los siguientes métodos para planificar un TimeTask:  public void schedule( TimerTask task, Date time ). Planifica una tarea para una ejecución sencilla en el tiempo especificado. Si el tiempo ha pasado ya, la tarea será planificada inmediatamente. Si la tarea ya ha sido planificada, una excepción del tipo IllegalStateException es lanzada.
  • 18. Scheduling Tasks  public void schedule( TimerTask task, long delay). Planifica una tarea para una ejecución sencilla después que la pausa especificada ha terminado.  public void schedule( TimerTask task, long delay , long periodo). Planifica una tarea para fixed- delay-execution. Los parámetros de pausa representan la cantidad de tiempo que debe esperar hasta la primera ejecución, los cuales pueden ser diferenciados del periodo en que este fue planificado para correr.
  • 19. Scheduling Tasks  public void schedule( TimerTask task, Date firstTime , long period). Planifica una tarea para fixed-delay-execution. El parámetro Date representa el tiempo de la primera ejecución.  public void scheduleAtFixedRate( TimerTask task, long delay, long period). Planifica una tarea para fixed-delay-execution. El parámetro delay representa la cantidad de tiempo que debe esperar hasta la primera ejecución, el cual puede ser diferenciado del periodo en que este duró durante su ejecución.
  • 20. Scheduling Tasks  public void scheduleAtFixedRate( TimerTask task, Date firstTime, long period). Planifica una tarea para fixed-delay-execution. El parámetro Date representa la cantidad de tiempo que debe esperar hasta la primera ejecución,
  • 21. Scheduling Tasks Cada método schedule() toma el tiempo de inicio y el tiempo de espera ( la cantidad de tiempo antes de la primera ejecución planificada). Cada método tiene un parámetro TimerTask para representar el código que corre cuando la tarea es planificada. La clase TimerTask tiene tres métodos:
  • 22. Scheduling Tasks La clase TimerTask tiene tres métodos:  public abstract void run(). El método es invocado por Timer. Note que este método es abstract y por eso debe ser sobrescrito en la clase hija.  public boolean cancel(). Cancela la tarea de tal manera que esta nunca volverá a correr de nuevo. Si la tarea esta corriendo actualmente, su ejecución actual será finalizada. El método retorna true si la próxima tarea planificada fue cancelada.
  • 23. Scheduling Tasks  public long scheduledExecutionTime(). Retorna el tiempo en el cual la más reciente ejecución de la tarea fue planificada para que ocurriera. Este método es útil para tareas fixed-delay, cuando el tiempo de planificación varía.
  • 24. Scheduling Tasks Por ejemplo, la siguiente sentencia if verifica si la ejecución de una tarea toma más de tres segundos. Si esto ha ocurrido esta ejecución voluntariamente evita que corra simplemente retorna del método run() if( System.currentTimeMillis() – this.scheduledExcecutionTime() >= 3000 ) { System.out.println(“Previus execution took too long “); }
  • 25. Scheduling Tasks Para demostrar una fixed-rate execution. La siguiente clase usa la tarea PhoneRinger para simular el timbrado de un teléfono, con un periodo de tres segundos.
  • 26. import java.util.TimerTask; public class PhoneRinger extends TimerTask{ int counter; public PhoneRinger(){ counter = 0; } public void run(){ counter++; System.out.println("Ring " + counter); } public int getRingCount(){ return counter; } }
  • 27. import java.util.Timer; public class Phone { private boolean ringing; private PhoneRinger task; private Timer timer; public Phone() { timer = new Timer(true); } public boolean isRinging() { return ringing; }
  • 28. public void startRinging() { ringing = true; task = new PhoneRinger(); timer.scheduleAtFixedRate(task, 0, 3000); } public void answer() { ringing = false; System.out.println("Phone rang " + task.getRingCount() + " times"); task.cancel(); }
  • 29. public static void main(String [] args) { Phone phone = new Phone(); phone.startRinging(); try { System.out.println("Phone started ringing..."); Thread.sleep(20000); }catch(InterruptedException e) {} System.out.println("Answering the phone..."); phone.answer(); } }
  • 31. Scheduling Tasks Hagamos algunos comentarios acerca de las clases PhoneRinger y Phone:  La clase PhoneRinger es una tarea TimerTask que mantiene el registro del número de rings y despliega un mensaje sencillo en el método run().  La clase Phone instancia un demonio Timer ,así que el Timer no mantiene corriendo la aplicación.
  • 32. Scheduling Tasks  Cada vez que el método startRinging() es invocado para simular una nueva llamada entrante, un nuevo objeto PhoneRinger es instanciado. Ud. no puede volver a usar el objeto PhoneRinger previo por que una tarea no puede ser replanificada.  Cuando el teléfono es contestado, la tarea es cancelada ( pero no el Timer ). Esto significa que la tarea no se ejecutará nuevamente, lo cual en nuestro ejemplo significa que el teléfono no volverá a sonar nuevamente.