Gyakorlati alapok III.
A Timer osztály
A Timer (időzítő) osztály elnevezéséből adódóan, meglepetésszerűen feladatok ütemezését, időzítését hivatott kiszolgálni. Alapértelmezésben ehhez programozástechnikailag 2+1 komponens szükséges:
-
maga az időzítő rutin,
-
az időzítendő rutin egyértelmű meghatározása,
-
a 2 fenti komponens működőképes egybeszerkesztése.
Az időzítést alapszinten, a legegyszerűbb módszerrel a következőképpen
tudjuk megoldani. Az időzítendő rutint
származtatjuk a TimerTask osztályból (Task
extends TimerTask) és a konkrét feladatot (itt 1 másodperces
konzolos szövegkiírás) beletesszük annak run()
metódusába:
class Task extends TimerTask {
public static int i = 0;
public void run() {
System.out.println("Feladat fut " + i++ + " masodperce.");
}
}
Mivel már objektumorientáltan gondolkozunk, az időzítés és az időzített
objektum paraméterezett összeszerkesztését a kötelező importálások mellett
másik osztályban (de azonos csomagban) is meg tudjuk tenni, itt például a
Main osztály main()
főprogramjában:
import java.util.Timer;
import java.util.TimerTask;
public class Main {
public static void main(String[] args) {
Timer timer = new Timer();
TimerTask task = new Task();
timer.schedule(task, 0, 1000);
}
}
Az egybeszerkesztés fő metódusa a schedule(),
amelynek az osztályban többféle változata is elérhető (A szignatúra és a metódus-túlterhelés
című fejezetcsomag).
Nézzük meg a futtatható Java-kódot:
Main.java
import java.util.Timer;
import java.util.TimerTask;
public class Main {
public static void main(String[] args) {
Timer timer = new Timer();
TimerTask task = new Task();
timer.schedule(task, 0, 1000);
}
}
Task.java
import java.util.Timer;
import java.util.TimerTask;
class Task extends TimerTask {
public static int i = 0;
public void run() {
System.out.println("Feladat fut " + i++ + " masodperce.");
}
}
Nyilvánvalóan célszerű az időzítést és az időzítendő feladatot egymástól
szétválasztani; magasabb programozási szinten ez egyenesen kötelező
elvárás. Ettől függetlenül a 2 komponens összehozható 1 osztályon belül
is:
import java.util.Timer;
import java.util.TimerTask;
public class Main extends TimerTask {
public static int i = 0;
public void run() {
System.out.println("Feladat fut "
+ i++ + " masodperce!");
}
public static void main(String[] args) {
Timer timer = new Timer();
TimerTask task = new Main();
timer.schedule(task, 0, 1000);
}
}
A
Catch me if you can! című fejezetben az időzítő rutin egy
érdekes alkalmazását tanulmányozhatjuk.