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:

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:

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

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:

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 



 

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.