[ Pobierz całość w formacie PDF ]

Rozdzia 11. Programowanie wielow tkowe 367
catch(InterruptedException exc) {
System.out.println(thrdName + " zosta przerwany.");
}
System.out.println(thrdName + " ko czy dzia anie.");
}
}
class UseThreads {
public static void main(String args[]) {
System.out.println("G ówny w tek rozpoczyna dzia anie.");
// Najpierw tworzy obiekt klasy MyThread.
Tworzy obiekt
MyThread mt = new MyThread("W tek potomny nr 1"); implementuj cy
interfejs Runnable.
// Nast pnie na jego podstawie tworzy w tek.
Thread newThrd = new Thread(mt); Tworzy w tek dla tego obiektu.
// Na koniec rozpoczyna wykonywanie w tku.
newThrd.start(); Uruchamia w tek.
for(int i=0; i
System.out.print(".");
try {
Thread.sleep(100);
}
catch(InterruptedException exc) {
System.out.println("W tek g ówny zosta przerwany.");
}
}
System.out.println("W tek g ówny ko czy dzia anie.");
}
}
Przyjrzyjmy si bli ej temu programowi. Najpierw klasa MyThread implementuje interfejs
Runnable. Oznacza to, e obiekt typu MyThread mo e zosta przekazany konstruktorowi klasy
i by wykonywany we w asnym w tku.
Wewn trz metody run() dzia a p tla for odliczaj ca od 0 do 9. Zwró uwag na wywo anie
metody sleep(). Metoda sleep() powoduje zawieszenie w tku, w którym zosta a wywo ana,
na czas wyra ony w milisekundach. Jej deklaracj przedstawi em poni ej:
static void sleep(long milisekund) throwws InterruptedException
Wykonywanie w tku zostaje zawieszone na czas milisekund. Metoda sleep() mo e wygene-
rowa wyj tek InterruptedException i wobec tego musi by wywo ywana w bloku try.
Metoda sleep() ma równie drug wersj , która umo liwia okre lenie czasu zawieszenia
w tku z dok adno ci nie tylko co do milisekundy, ale równie nanosekundy, je li potrzebu-
jesz a takiej precyzji. W naszym przyk adzie metoda sleep() wywo ywana przez metod
run() zawiesza wykonywanie w tku na 400 milisekund podczas ka dego przebiegu p tli.
Dzi ki temu spowolnieniu mo emy obserwowa wykonywanie w tku.
Wewn trz metody main() nowy obiekt typu Thread zostaje utworzony na skutek wykonania
poni szej sekwencji instrukcji:
Poleć książkę
Kup książkę
368 Java. Przewodnik dla pocz tkuj cych
// Najpierw tworzy obiekt klasy MyThread.
MyThread mt = new MyThread("W tek potomny nr 1");
// Nast pnie na jego podstawie tworzy w tek.
Thread newThrd = new Thread(mt);
// Na koniec rozpoczyna wykonywanie w tku.
newThrd.start();
Jak sugeruj to komentarze, najpierw zostaje utworzony obiekt klasy MyThread. Obiekt ten
zostaje nast pnie u yty do stworzenia obiektu typu Thread. Jest to mo liwe, poniewa klasa
MyThread implementuje interfejs Runnable. Na koniec wykonywanie nowego w tku rozpo-
czyna si dzi ki wywo aniu metody start(). Wywo uje ona metod run() nowego w tku.
Po wywo aniu metody start() sterowanie powraca do metody main(), która rozpoczyna
wykonywanie w asnej p tli for. P tla ta wykonywana jest 50 razy i w ka dym przebiegu zawie-
sza wykonanie g ównego w tku na 100 milisekund. Oba w tki kontynuuj swoje dzia anie,
wspó dziel c procesor (w systemie jednoprocesorowym). Trwa to a do momentu, w którym
zako czy si dzia anie wykonywanych przez nie p tli. Komunikaty wy wietlane przez oba
w tki przedstawi em poni ej. Ze wzgl du na ró nice w rodowisku wykonania programu
efekt jego dzia ania w Twoim przypadku mo e si nieco ró ni .
G ówny w tek rozpoczyna dzia anie.
.W tek potomny nr 1 rozpoczyna dzia anie.
....W tek potomny nr 1 jest wykonywany, warto licznika: 0
...W tek potomny nr 1 jest wykonywany, warto licznika: 1
....W tek potomny nr 1 jest wykonywany, warto licznika: 2
....W tek potomny nr 1 jest wykonywany, warto licznika: 3
....W tek potomny nr 1 jest wykonywany, warto licznika: 4
....W tek potomny nr 1 jest wykonywany, warto licznika: 5
....W tek potomny nr 1 jest wykonywany, warto licznika: 6
....W tek potomny nr 1 jest wykonywany, warto licznika: 7
....W tek potomny nr 1 jest wykonywany, warto licznika: 8
....W tek potomny nr 1 jest wykonywany, warto licznika: 9
W tek potomny nr 1 ko czy dzia anie.
..........W tek g ówny ko czy dzia anie.
W przyk adzie tym warto zwróci uwag na jeszcze jedn rzecz. Aby zilustrowa fakt rów-
noczesnego wykonywania w tku g ównego i w tku mt, musia em unikn zako czenia dzia-
ania metody main(), zanim w tek mt zako czy swoje dzia anie. W tym celu wykorzysta em
ró nice czasowe w dzia aniu obu w tków. Poniewa wywo ania metody sleep() w p tli for [ Pobierz całość w formacie PDF ]

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • odszkodowanie.xlx.pl
  • © 2009 ...coś się w niej zmieniło, zmieniło i zmieniało nadal. - Ceske - Sjezdovky .cz. Design downloaded from free website templates