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
|