Jelenlegi hely

19.2.1 Thread leszármazott és a run felülírása

Az első lépés a szálak testreszabásánál, hogy Thread osztály leszármazottját létrehozzuk, és az üres run metódusát felülírjuk, hogy csináljon is valamit. Nézzük meg a SimpleThread osztályt, amely ezt teszi:

public class SimpleThread extends Thread {
    public SimpleThread(String str) {
        super(str);
    }
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println(i + " " + getName());
            try {
                sleep((long)(Math.random() * 1000));
            } catch (InterruptedException e) {}
        }
        System.out.println("KÉSZ! " + getName());
    }
}

A SimpleThread osztály első metódusa egy konstruktor, amely paraméterként egy String-et fogad. A konstruktor meghívja az ősosztály konstruktorát, ami azért érdekes számunkra, mert az beállítja a szál nevét. Ezt a nevet használjuk a későbbi programban a szál felhasználói azonosítására. A nevet később a getName metódussal tudjuk lekérdezni.

A SimpleThread osztály következő metódusa a run. Itt történik a Thread érdemi működése. Ebben az esetben egy tizes for ciklust tartalmaz. Minden ciklusban kiírja az iteráció számát, a Thread nevét, és utána altatásra kerül véletlenszerűen 1 másodperces határon belül. Ha végzett, a KÉSZ! feliratot írja ki a szál nevével együtt. Ennyi a SimpleThread osztály. Használjuk fel ezt a TwoThreadsTest-ben.

A TwoThreadsTest osztály main metódusába két SimpleThread szálat hozunk létre: Jamaica és Fuji. (Ha valaki nem tudná eldönteni hova menjen nyaralni, akkor használja ezt a programot.)

public class TwoThreadsTest {
    public static void main (String[] args) {
        new SimpleThread("Jamaica").start();
        new SimpleThread("Fiji").start();
    }
}

A main metódus azonnal mindkét szálat létrehozza a start metódus meghívásával, amely a run metódust hívja meg. Fordítás és futtatás után kibontakozik az úti cél. A kimenet hasonló kell, hogy legyen:

Two Thread Test

Figyeljük meg, hogy a szálak kimenete mennyire független egymástól. Ennek az az oka, hogy a SimpleThread szálak egyidejűleg futnak. Mindkét run metódus fut, és mindkettőnek van saját kimenete ugyanakkor. Ha a ciklus befejeződik, a szálak leállnak és meghalnak.