Programowanie obiektowe - JAVA
Informacje ogólne > Laboratorium 5 > Tworzenie wątków

Tworzenie wątków

W Javie możliwe są dwie metody tworzenia wątków - poprzez dziedziczenie z klasy Thread oraz poprzez implementację interfejsu Runnable.

1. Tworzenie wątków poprzez dziedziczenie z klasy Thread

Definicja klasy:

class MyThread extends Thread {
     . . .  
     public void run() {
          . . .
     }
}

Tworzenie obiektu i uruchamianie wątku:

MyThread t = new MyThread();
t.start();

2. Tworzenie wątków poprzez implementację interfejsu Runnable

Definicja klasy:
class MyThreadRun implements Runnable {
     . . .
     public void run() {
          . . .
     }
}


Tworzenie i uruchamianie:

MyThreadRun r = new MyThreadRun();
Thread t = new Thread(r);
t.start();

3. Metoda run().

Po utworzeniu i uruchomieniu wątku wykonywana jest jego metoda run(). Metoda ta może zawierać kilka linii kodu, które zostaną wykonane i wątek zakończy działanie, ale może również posiadać pętlę nieskończoną i wątek bedzie działał do momentu gdy nie zostanie przerwany z zewnątrz.

Tworzenie wątków z pętlami (również nieskończonymi) jest często wykorzystywane do sekwencyjnego wykonywania jakiegoś kodu.
W takim przypadku wewnątrz wątku często wykorzystuje się metodę Thread.sleep(), która powoduję przerwanie wykonywanie wątku na czas określony w argumencie metody (wyrażony w milisekundach).

W kodzie metoda ta musi być otoczona blokiem try-catch aby przechwycić wyjątek InterruptedException. Wyjątek ten występuje na przykłąd wówczas gdy uśpiony wątek zostanie przerwany przez inny wątek (metodą Thread.interrupt() )

4. Zakończenie wątku.

Wątek kończy swoje działenie w sposób "naturalny", gdy kończy się wykonywanie metody run(). Można też wątek przerwać "z zewnątrz", korzystając z jednej z metod:
- Thread.interrupt() - przerywanie wykonywania wątku
- Thread.join() - kończenie wątku

Dostępne są również metody suspend i stop, ale ich użycie może być niebezpieczne .

5. Pełny opis klasy Thread:

http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Thread.html

W szczególności warto zapoznać się z metodami:
Threat.setPriority(int)
Threat.getPriority(int)

Thread.yield()

Przykłady z wykładu:
watek1.java
watek2.java
watek3.java
Rysowanie2.java