You are on page 1of 32

IDZ DO

PRZYKADOWY ROZDZIA
SPIS TRECI

KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG

TWJ KOSZYK
DODAJ DO KOSZYKA

CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK

CZYTELNIA
FRAGMENTY KSIEK ONLINE

Java 2. Techniki
zaawansowane.
Wydanie II
Autorzy: Cay Horstmann, Gary Cornell
Tumaczenie: Jaromir Senczyk
ISBN: 83-7361-842-2
Tytu oryginau: Core Java(TM) 2, Volume II
Advanced Features (7th Edition)
Format: B5, stron: 1144
Przykady na ftp: 1644 kB

Kompletne i niezastpione rdo wiedzy dla dowiadczonych programistw


Kolejne wydanie doskonaego przewodnika po zaawansowanych moliwociach Javy
Wszystkie kody rdowe w ksice zaktualizowane do J2SE 5.0
Szczegowe omwienie wielowtkowoci, kolekcji, programowania aplikacji
sieciowych i bazodanowych, bezpieczestwa i internacjonalizacji aplikacji,
obiektw rozproszonych i jzyka XML
Kolejne ju wydanie przewodnika opisujcego zaawansowane i nieznane waciwoci
jzyka Java, tym razem w wersji 5.0, to kompendium wiedzy dla wszystkich programistw
zamierzajcych tworzy rozbudowane aplikacje. Nowa wersja jzyka Java to nie tylko nowy
numer -- to przede wszystkim ogromna ilo nowych funkcji i moliwoci, klas i obiektw.
W JDK 5.0 wprowadzono nowe mechanizmy obsugi wtkw i kolekcji, rozszerzono
moliwoci biblioteki Swing i klas wykorzystywanych do tworzenia aplikacji bazodanowych
i sieciowych. Java 2. Techniki zaawansowane. Wydanie II przedstawia i opisuje wszystkie
te nowoci.
Wszystkie przykadowe programy zostay zaktualizowane do najnowszej wersji Javy
i przedstawiaj praktyczne rozwizania rzeczywistych problemw, z jakimi moe spotka si
twrca aplikacji w jzyku Java. Ksika zawiera wiele nowych podrozdziaw powiconych
nowociom wprowadzonym w J2SE 5.0. Dokadnie i na przykadach opisuje zagadnienia
zwizane z wielowtkowoci, kolekcjami, metadanymi, stosowaniem jzyka XML,
komunikacj z bazami danych i wieloma innymi elementami zaawansowanego
programowania w Javie.

Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl

Aplikacje wielowtkowe
Kolekcje i operacje na nich
Poczenia sieciowe
Interfejs JDBC i LDAP
Aplikacje rozproszone
Technologia CORBA
Zaawansowane moliwoci bibliotek Swing i AWT
Technologia JavaBeans
Bezpieczestwo aplikacji
Internacjonalizacja
Korzystanie z jzyka XML
Jeli zamierzasz wykorzysta Jav w zoonym projekcie informatycznym, ta ksika bdzie
dla Ciebie niezastpiona.

Spis treci
Podzikowania........................................................................................................................................... 11
Przedmowa............................................................................................................................................... 13
Do Czytelnika.............................................................................................................. 13
O ksice ................................................................................................................... 13

Rozdzia 1. Wielowtkowo .................................................................................................................... 17


Czym s wtki? ........................................................................................................... 18
Zastosowanie wtkw............................................................................................. 23
Przerywanie wtkw..................................................................................................... 29
Stany wtkw ............................................................................................................. 32
Nowe wtki ........................................................................................................... 32
Wtki wykonywalne................................................................................................. 33
Wtki zablokowane................................................................................................. 33
Wtki martwe ........................................................................................................ 35
Waciwoci wtkw .................................................................................................... 36
Priorytety wtkw ................................................................................................... 36
Wtki-demony ........................................................................................................ 37
Grupy wtkw ........................................................................................................ 37
Procedury obsugi wyjtkw ..................................................................................... 39
Synchronizacja............................................................................................................ 40
Przykad wycigu .................................................................................................... 41
Wytumaczenie wycigu........................................................................................... 45
Blokady................................................................................................................. 46
Warunki ................................................................................................................ 49
Sowo kluczowe synchronized .................................................................................. 54
Bloki synchronizowane............................................................................................ 60
Pola volatile .......................................................................................................... 61
Zakleszczenia ........................................................................................................ 63
Rwnorzdne traktowanie wtkw............................................................................ 65
Testowanie blokad i limity czasu.............................................................................. 65
Blokady odczytu i zapisu ......................................................................................... 67
Dlaczego metody stop i suspend nie s zalecane? .................................................... 68
Kolejki blokujce ......................................................................................................... 70
Kolekcje..................................................................................................................... 76
Efektywne implementacje kolejki i tablicy mieszajcej ................................................ 76
Kolekcje CopyOnWriteArrayList i CopyOnWriteArraySet................................................ 78
Starsze kolekcje i wielowtkowo ........................................................................... 78

Java 2. Techniki zaawansowane


Interfejsy Callable i Future............................................................................................ 78
Egzekutory.................................................................................................................. 83
Pule wtkw .......................................................................................................... 83
Wykonywanie zada wedug planu ............................................................................ 87
Sterowanie grupami wtkw .................................................................................... 88
Synchronizatory........................................................................................................... 89
Bariery .................................................................................................................. 90
Rejestry odliczajce................................................................................................ 91
Przekaniki ............................................................................................................ 91
Kolejki synchroniczne ............................................................................................. 91
Semafory .............................................................................................................. 92
Wtki i Swing .............................................................................................................. 98
Zasada pojedynczego wtku .................................................................................... 99
Wtek roboczy i Swing .......................................................................................... 104

Rozdzia 2. Kolekcje..................................................................................................................................111
Interfejsy kolekcji ...................................................................................................... 111
Rozdzielenie interfejsw kolekcji od ich implementacji.............................................. 112
Interfejsy Collection i Iterator w bibliotekach jzyka Java........................................... 114
Kolekcje konkretne.................................................................................................... 119
Listy powizane ................................................................................................... 120
Klasa ArrayList .................................................................................................... 128
Zbiory z kodowaniem mieszajcym ......................................................................... 129
Zbiory drzewiaste ................................................................................................. 132
Kolejki z priorytetami ............................................................................................ 138
Mapy .................................................................................................................. 139
Specjalizowane klasy zbiorw i map ....................................................................... 144
Szkielet kolekcji ........................................................................................................ 149
Widoki i opakowania............................................................................................. 152
Operacje masowe ................................................................................................ 158
Wykorzystanie biblioteki kolekcji z tradycyjnymi bibliotekami ..................................... 159
Rozbudowywanie szkieletu .................................................................................... 160
Algorytmy ................................................................................................................. 163
Sortowanie i tasowanie......................................................................................... 164
Wyszukiwanie binarne........................................................................................... 167
Proste algorytmy .................................................................................................. 168
Programowanie wasnych algorytmw ..................................................................... 169
Tradycyjne kolekcje.................................................................................................... 171
Klasa Hashtable .................................................................................................. 171
Wyliczenia ........................................................................................................... 171
Zbiory waciwoci ............................................................................................... 172
Stosy.................................................................................................................. 173
Zbiory bitw......................................................................................................... 173

Rozdzia 3. Programowanie aplikacji sieciowych ................................................................................ 179


Poczenia z serwerem .............................................................................................. 179
Implementacja serwerw............................................................................................ 183
Obsuga wielu klientw ......................................................................................... 186
Wysyanie poczty elektronicznej................................................................................... 189
Poczenia wykorzystujce URL ................................................................................... 193
URL i URI ............................................................................................................ 194
Zastosowanie klasy URLConnection do pobierania informacji .................................... 196
Wysyanie danych do formularzy............................................................................. 205

Spis treci

Zaawansowane programowanie przy uyciu gniazdek sieciowych..................................... 214


Limity czasu gniazdek........................................................................................... 214
Przerywanie operacji gniazdek ............................................................................... 215
Poczenia czciowo zamknite............................................................................ 219
Adresy internetowe............................................................................................... 220

Rozdzia 4. Poczenia do baz danych: JDBC........................................................................................ 225


Architektura JDBC ..................................................................................................... 226
Typy sterownikw JDBC......................................................................................... 227
Typowe zastosowania JDBC .................................................................................. 228
Jzyk SQL................................................................................................................. 230
Instalacja JDBC......................................................................................................... 235
Podstawowe koncepcje programowania przy uyciu JDBC............................................... 235
Adresy URL baz danych......................................................................................... 236
Nawizywanie poczenia ...................................................................................... 236
Wykonywanie polece jzyka SQL .......................................................................... 241
Zaawansowane typy jzyka SQL ............................................................................. 242
Zarzdzanie poczeniami, poleceniami i zbiorami wynikw ....................................... 245
Wypenianie bazy danych....................................................................................... 246
Wykonywanie zapyta ................................................................................................ 249
Polecenia przygotowane........................................................................................ 250
Przewijalne i aktualizowalne zbiory wynikw zapyta ...................................................... 258
Przewijalne zbiory rekordw ................................................................................... 259
Aktualizowalne zbiory rekordw.............................................................................. 262
Metadane................................................................................................................. 266
Zbiory rekordw ........................................................................................................ 275
Buforowane zbiory rekordw .................................................................................. 276
Transakcje................................................................................................................ 285
Punkty kontrolne .................................................................................................. 286
Aktualizacje wsadowe (JDBC 2) ............................................................................. 286
Zaawansowane zarzdzanie poczeniami .................................................................... 289
Wprowadzenie do LDAP.............................................................................................. 290
Konfiguracja serwera LDAP.................................................................................... 291
Dostp do informacji katalogu LDAP....................................................................... 294

Rozdzia 5. Obiekty rozproszone .......................................................................................................... 305


Role klienta i serwera ................................................................................................ 306
Wywoania zdalnych metod ......................................................................................... 308
Namiastka i szeregowanie parametrw................................................................... 309
Dynamiczne adowanie klas................................................................................... 311
Konfiguracja wywoania zdalnych metod ....................................................................... 312
Interfejsy i implementacje ..................................................................................... 312
Generowanie klasy namiastki ................................................................................ 315
Odnajdywanie obiektw serwera ............................................................................ 315
Po stronie klienta................................................................................................. 319
Przygotowanie wdroenia....................................................................................... 324
Wdroenie programu............................................................................................. 326
Przekazywanie parametrw zdalnym metodom .............................................................. 329
Przekazywanie lokalnych obiektw.......................................................................... 329
Przekazywanie zdalnych obiektw........................................................................... 341
Zdalne obiekty i metody equals oraz hashCode ....................................................... 343
Klonowanie zdalnych obiektw............................................................................... 344

Java 2. Techniki zaawansowane


Aktywacja obiektw serwera ....................................................................................... 344
Java IDL i CORBA ...................................................................................................... 350
Jzyk IDL............................................................................................................. 351
Przykad aplikacji CORBA....................................................................................... 356
Implementacja serwerw CORBA ........................................................................... 365
Wywoania zdalnych metod i SOAP .............................................................................. 370

Rozdzia 6. Zaawansowane moliwoci pakietu Swing....................................................................... 377


Listy ........................................................................................................................ 377
Komponent JList .................................................................................................. 378
Modele list .......................................................................................................... 384
Wstawianie i usuwanie ......................................................................................... 388
Odrysowywanie zawartoci listy.............................................................................. 390
Drzewa..................................................................................................................... 395
Najprostsze drzewa .............................................................................................. 396
Przegldanie wzw............................................................................................. 411
Rysowanie wzw................................................................................................ 412
Nasuchiwanie zdarze w drzewach ........................................................................ 419
Wasne modele drzew........................................................................................... 425
Tabele ..................................................................................................................... 433
Najprostsze tabele ............................................................................................... 433
Modele tabel ....................................................................................................... 436
Filtry sortujce ..................................................................................................... 445
Rysowanie i edytowanie zawartoci komrek........................................................... 451
Operacje na wierszach i kolumnach........................................................................ 464
Wybr wierszy, kolumn i komrek........................................................................... 465
Komponenty formatujce tekst ................................................................................... 473
Wskaniki postpu .................................................................................................... 479
Paski postpu ..................................................................................................... 480
Monitory postpu ................................................................................................. 484
Monitorowanie postpu strumieni wejcia............................................................... 489
Organizatory komponentw......................................................................................... 494
Panele dzielone ................................................................................................... 495
Panele z zakadkami............................................................................................. 499
Panele pulpitu i ramki wewntrzne ......................................................................... 504
Rozmieszczenie kaskadowe i ssiadujce............................................................... 507
Zgaszanie weta do zmiany waciwoci .................................................................. 510

Rozdzia 7. Zaawansowane moliwoci biblioteki AWT........................................................................ 521


Potokowe tworzenie grafiki ......................................................................................... 522
Figury....................................................................................................................... 524
Wykorzystanie klas obiektw graficznych................................................................. 526
Pola......................................................................................................................... 539
lad pdzla .............................................................................................................. 543
Wypenienia .............................................................................................................. 550
Przeksztacenia ukadu wsprzdnych ......................................................................... 556
Przycinanie ............................................................................................................... 565
Przezroczysto i skadanie obrazw............................................................................ 569
Wskazwki operacji graficznych................................................................................... 577
Czytanie i zapisywanie plikw graficznych ..................................................................... 583
Wykorzystanie obiektw zapisu i odczytu plikw graficznych ...................................... 583
Odczyt i zapis plikw zawierajcych sekwencje obrazw............................................ 585

Spis treci

Operacje na obrazach ................................................................................................ 595


Dostp do danych obrazu...................................................................................... 595
Filtrowanie obrazw .............................................................................................. 602
Drukowanie .............................................................................................................. 610
Drukowanie grafiki................................................................................................ 611
Drukowanie wielu stron......................................................................................... 621
Podgld wydruku .................................................................................................. 623
Usugi drukowania................................................................................................ 631
Usugi drukowania za porednictwem strumieni ....................................................... 637
Atrybuty drukowania ............................................................................................. 642
Schowek .................................................................................................................. 649
Klasy i interfejsy umoliwiajce przekazywanie danych.............................................. 650
Przekazywanie tekstu ........................................................................................... 651
Interfejs Transferable i formaty danych ................................................................... 655
Przekazywanie obrazw za pomoc schowka ........................................................... 657
Wykorzystanie lokalnego schowka do przekazywania referencji obiektw....................... 662
Wykorzystanie schowka systemowego do przekazywania obiektw Java...................... 668
Mechanizm przecignij i upu................................................................................. 672
Cele mechanizmu przecignij i upu .................................................................. 674
rda mechanizmu przecignij i upu................................................................ 683
Przekazywanie danych pomidzy komponentami Swing............................................. 688

Rozdzia 8. JavaBeans........................................................................................................................... 693


Dlaczego ziarnka? ..................................................................................................... 694
Proces tworzenia ziarnek JavaBeans ........................................................................... 695
Wykorzystanie ziarnek do tworzenia aplikacji ................................................................ 698
Umieszczanie ziarnek w plikach JAR ....................................................................... 699
Korzystanie z ziarnek ............................................................................................ 700
Wzorce nazw waciwoci ziarnek i zdarze .................................................................. 705
Typy waciwoci ziarnek ............................................................................................ 708
Waciwoci proste .............................................................................................. 708
Waciwoci indeksowane ..................................................................................... 709
Waciwoci powizane......................................................................................... 710
Waciwoci ograniczone ...................................................................................... 712
Klasa informacyjna ziarnka......................................................................................... 718
Edytory waciwoci ................................................................................................... 723
Implementacja edytora waciwoci........................................................................ 730
Indywidualizacja ziarnka ............................................................................................. 744
Implementacja klasy indywidualizacji ...................................................................... 746
Trwao ziarnek JavaBeans ....................................................................................... 753
Zastosowanie mechanizmu trwaoci JavaBeans dla dowolnych danych...................... 758
Kompletny przykad zastosowania trwaoci JavaBeans ............................................ 764

Rozdzia 9. Bezpieczestwo .................................................................................................................. 775


adowanie klas ......................................................................................................... 776
Implementacja wasnej procedury adujcej............................................................. 779
Weryfikacja kodu maszyny wirtualnej ........................................................................... 784
Menedery bezpieczestwa i pozwolenia ...................................................................... 789
Bezpieczestwo na platformie Java 2 ..................................................................... 791
Pliki polityki bezpieczestwa.................................................................................. 794
Tworzenie wasnych klas pozwole ......................................................................... 801
Implementacja klasy pozwole............................................................................... 802

Java 2. Techniki zaawansowane


Tworzenie wasnych menederw bezpieczestwa.................................................... 808
Uwierzytelnianie uytkownikw............................................................................... 815
Moduy JAAS........................................................................................................ 820
Podpis cyfrowy .......................................................................................................... 829
Skrty wiadomoci ............................................................................................... 830
Podpisywanie wiadomoci..................................................................................... 835
Uwierzytelnianie wiadomoci ................................................................................. 843
Certyfikaty X.509 ................................................................................................. 845
Tworzenie certyfikatw.......................................................................................... 847
Podpisywanie certyfikatw..................................................................................... 849
Podpisywanie kodu.................................................................................................... 857
Podpisywanie plikw JAR....................................................................................... 857
Certyfikaty twrcw oprogramowania ...................................................................... 861
Szyfrowanie .............................................................................................................. 863
Szyfrowanie symetryczne....................................................................................... 863
Strumienie szyfrujce ........................................................................................... 870
Szyfrowanie kluczem publicznym ............................................................................ 871

Rozdzia 10. Internacjonalizacja ........................................................................................................... 877


Lokalizatory .............................................................................................................. 878
Formaty liczby ........................................................................................................... 883
Waluty ................................................................................................................ 889
Data i czas ............................................................................................................... 890
Porzdek alfabetyczny................................................................................................ 897
Formatowanie komunikatw ....................................................................................... 905
Formatowanie z wariantami ................................................................................... 907
Pliki tekstowe i zbiory znakw ..................................................................................... 909
Internacjonalizacja a pliki rdowe programw ........................................................ 909
Komplety zasobw .................................................................................................... 910
Lokalizacja zasobw ............................................................................................. 911
Pliki waciwoci .................................................................................................. 912
Klasy kompletw zasobw..................................................................................... 913
Kompletny przykad ................................................................................................... 915

Rozdzia 11. Metody macierzyste.......................................................................................................... 929


Wywoania funkcji jzyka C z programw w jzyku Java .................................................. 931
Wykorzystanie funkcji printf ................................................................................... 932
Numeryczne parametry metod i wartoci zwracane........................................................ 937
Wykorzystanie funkcji printf do formatowania liczb ................................................... 937
acuchy znakw jako parametry ................................................................................ 938
Wywoanie funkcji sprintf przez metod macierzyst................................................. 942
Dostp do skadowych obiektu ................................................................................... 944
Dostp do pl instancji......................................................................................... 944
Dostp do pl statycznych .................................................................................... 949
Sygnatury ................................................................................................................. 949
Wywoywanie metod jzyka Java.................................................................................. 951
Wywoywanie metod obiektw................................................................................ 951
Wywoywanie metod statycznych ............................................................................ 952
Konstruktory........................................................................................................ 953
Alternatywne sposoby wywoywania metod .............................................................. 954
Tablice..................................................................................................................... 958
Obsuga bdw ........................................................................................................ 963

Spis treci

Interfejs programowy wywoa jzyka Java.................................................................... 967


Kompletny przykad: dostp do rejestru systemu Windows ............................................. 971
Rejestr systemu Windows ..................................................................................... 971
Interfejs dostpu do rejestru na platformie Java ...................................................... 972
Implementacja dostpu do rejestru za pomoc metod macierzystych ......................... 973

Rozdzia 12. Jzyk XML ......................................................................................................................... 987


Wprowadzenie do jzyka XML ..................................................................................... 988
Struktura dokumentu XML..................................................................................... 990
Parsowanie dokumentw XML .................................................................................... 993
Kontrola poprawnoci dokumentw XML .................................................................... 1003
Definicje typw dokumentw ............................................................................... 1005
XML Schema ..................................................................................................... 1012
Praktyczny przykad ............................................................................................ 1014
Wyszukiwanie infomacji i XPath................................................................................. 1028
Przestrzenie nazw.................................................................................................... 1033
Wykorzystanie parsera SAX ...................................................................................... 1036
Tworzenie dokumentw XML..................................................................................... 1041
Przeksztacenia XSL................................................................................................. 1049

Rozdzia 13. Adnotacje ..........................................................................................................................1059


Umieszczanie metadanych w programach .................................................................. 1060
Przykad adnotacje obsugi zdarze ....................................................................... 1061
Skadnia adnotacji................................................................................................... 1066
Adnotacje standardowe............................................................................................ 1070
Adnotacje regularne ........................................................................................... 1070
Metaadnotacje................................................................................................... 1071
Narzdzie apt do przetwarzania adnotacji w kodzie rdowym ...................................... 1074
Inynieria kodu bajtowego ........................................................................................ 1080
Modyfikacja kodu bajtowego podczas adowania.................................................... 1089

Skorowidz.............................................................................................................................................1093

Wielowtkowo
W tym rozdziale:
n

Czym s wtki?

Przerywanie wtkw.

Stany wtkw.

Waciwoci wtkw.

Synchronizacja.

Kolejki blokujce.

Kolekcje.

Interfejsy Callable i Future.

Egzekutory.

Synchronizatory.

Wtki i Swing.

Czytelnik z pewnoci wie, e wielozadaniowo oznacza moliwo pracy wielu programw


rwnoczenie. Dziki wielozadaniowoci moemy w czasie edycji dokumentu drukowa inny
dokument bd wysya faks. Oczywicie wtedy, gdy mamy do dyspozycji tylko maszyn
o pojedynczym procesorze, uzyskujemy jedynie wraenie rwnoczesnego wykonywania
wielu programw, poniewa system operacyjny przydziela czas procesora kolejnym zadaniom. Takie zarzdzanie przydziaem procesora jest tym bardziej moliwe, e wiele zada absorbuje jego moc obliczeniow w znikomym stopniu.
Wielozadaniowo jest realizowana na dwa sposoby: z wywaszczaniem i bez. W pierwszym przypadku system operacyjny samodzielnie podejmuje decyzj o przydziale procesora kolejnym zadaniom, natomiast w drugim wykonywanie zadania moe zosta przerwane
tylko wtedy, jeli zgodzi si ono odda sterowanie. Starsze systemy operacyjne, takie jak
Windows 3.1 i Mac OS 9, pracuj na zasadzie wielozadaniowoci bez wywaszczania.
Wten sam sposb dziaaj te systemy operacyjne prostych urzdze, na przykad telefonw
komrkowych. Natomiast system UNIX i jego pochodne, a take systemy Windows NT/XP
(oraz Windows 9x w przypadku aplikacji 32-bitowych) i OS X stosuj wielozadaniowo

18

Java 2. Techniki zaawansowane


z wywaszczaniem. Chocia realizacja wielozadaniowoci z wywaszczaniem jest duo
trudniejsza, to rozwizanie takie jest bardziej efektywne, poniewa w przypadku wielozadaniowoci bez wywaszczania niewaciwie zachowujca si aplikacja moe wstrzyma
wykonywanie pozostaych zada w systemie.
Wielowtkowo rozszerza ide wielozadaniowoci w ten sposb, e kady z programw moe
wykonywa rwnoczenie wiele zada. Zadania te nazywamy wtkami. Program, ktry wykonuje wicej ni jeden wtek, nazywamy wielowtkowym.
Zasadnicza rnica pomidzy zadaniami a wtkami polega na tym, e podczas gdy kade zadanie dysponuje wasnym oddzielnym zestawem danych (zmiennych), to wtki operuj na
wsplnych danych. Utworzenie bd usunicie wtku wie si z duo mniejszym nakadem
ze strony systemu operacyjnego ni w przypadku tych samych operacji dla zadania. Podobnie
komunikacja midzy zadaniami jest mniej efektywna ni pomidzy wtkami. Dlatego te
zdecydowana wikszo wspczesnych systemw operacyjnych obsuguje wielowtkowo.
Wielowtkowo okazuje si niesychanie przydatna w praktyce. Przegldarka internetowa,
wykorzystujc wtki, pozwala jednoczenie zaadowa wiele obrazw na stronie. Klient poczty
elektronicznej umoliwia czytania poczty, w trakcie pobierajc nowe wiadomoci. Take Java
uywa dodatkowego wtku, aby odzyska w tle niewykorzystywan przez program pami. Pogramy wyposaone w graficzny interfejs uytkownika stosuj osobny wtek do uzyskiwania informacji o zdarzeniach zachodzcych w systemie okienkowym. W rozdziale tym pokaemy,
w jaki sposb wykorzysta zalety wielowtkowoci w aplikacjach tworzonych w jzyku Java.
Pakiet JDK 5.0 udostpnia wiele nowych klas i interfejsw dostarczajcych zaawansowanej implementacji mechanizmw wielowtkowych. W rozdziale tym omwimy nowe moliwoci
JDK 5.0, a take klasyczne mechanizmy synchronizacji i pomoemy Ci dokona waciwego
wyboru pomidzy nimi.
Wielowtkowo nie jest prostym zagadnieniem. W rozdziale tym przedstawiamy wszystkie narzdzia, ktre udostpnia jzyk Java do programowania wtkw. Wyjaniamy przy
tym sposb ich wykorzystania, zwizane z tym ograniczenia i ilustrujemy cao prostymi,
ale typowymi przykadami. W bardziej zoonych przypadkach Czytelnik powinien jednak
skorzysta z bardziej specjalistycznej literatury, na przykad Concurrent Programming in
Java autorstwa Douga Lea (Addison-Wesley, 1999).

Czym s wtki?
Zapoznajmy si najpierw z przykadowym programem, ktry nie uywa wtkw i w konsekwencji uytkownik nie moe wykona za jego pomoc wielu dziaa naraz. Pniej pokaemy, jak atwo usun te niedogodnoci, wprowadzajc do programu wtki. Program
ten bdzie animacj piki odbijajcej si od ramki okienka (patrz rysunek 1.1).
Wybranie przez uytkownika przycisku Start powoduje pojawienie si w lewym grnym
rogu okienka piki, ktra rozpoczyna swj ruch. Metoda obsugi zdarzenia dla przycisku
Start wywouje metod . Metoda ta zawiera ptl, w ktrej 1000 razy wykonywana
jest metoda  powodujca niewielkie przesunicie rysunku piki, ewentualn zmian
kierunku ruchu w przypadku odbicia od ramki i odrysowanie ta okna.

Rozdzia 1. n Wielowtkowo

19

Rysunek 1.1.
Animacja piki
odbijajcej si
od ramki okienka

 




  


 !

  
" #$!

#!
%&'(
)

Metoda statyczna 


klasy  powoduje zawieszenie wykonywania ptli na okrelon liczb milisekund.
Wywoanie metody  
nie tworzy nowego wtku metoda 
jest statyczn metod klasy , ktra powoduje wstrzymanie wykonywania aktywnego wtku na okrelony czas.
Metoda 
moe spowodowa wystpienie wyjtku  

. Wyjtek ten
oraz sposb jego obsugi omwimy dokadniej w dalszej czci rozdziau. W obecnej wersji programu jego wystpienie spowoduje jedynie przerwanie animacji.
Animacja ruchu piki w obecnej wersji programu absorbuje cakowicie jedyny wtek aplikacji w jej obecnej postaci. Jeli uytkownik zechce, zanim ptla wykona si 1000 razy,
przerwa dziaanie programu, wybierajc przycisk  , to nie przyniesie to zamierzonego
efektu. Program nie moe bowiem obsuy tego zdarzenia, dopki nie zakoczy animacji.
Przygldajc si penemu tekstowi programu zamieszczonemu poniej, zauwaymy wywoanie
$! 
$!" #$!

wewntrz metody  klasy . Rozwizanie to moe wydawa si dziwne, poniewa zwykle wywoujemy metod 
 i pozwalamy AWT zaj si okreleniem kontekstu graficznego i odrysowaniem zawartoci okna. Jednak jeli postpimy w ten
sposb take w tym programie, to odrysowanie nie bdzie mogo si odby, poniewa
metoda  zmonopolizowaa przetwarzanie. W nastpnej wersji programu, ktra
bdzie oblicza kolejne pozycji piki w osobnym wtku, z powrotem bdziemy mogli zastosowa wywoanie metody 
.

20

Java 2. Techniki zaawansowane


Zachowanie obecnej wersji programu jest dalekie od doskonaoci. W wikszoci przypadkw gdy program wykonuje czasochonne operacje, musi istnie moliwo ich przerwania.
Typowym przykadem s wszelkie programy czytajce dane z sieci. Zawsze powinna istnie
moliwo przerwania na przykad procesu adowania duego obrazka. Jeli po obejrzeniu jego fragmentu uytkownik stwierdzi, e nie interesuje go cao, to wybranie przycisku Stop
lub Back powinno spowodowa przerwanie procesu adowania. W dalszej czci rozdziau
pokaemy, w jaki sposb mona zapewni uytkownikowi pen kontrol nad dziaaniem
programu przez wykonywanie jego kluczowych fragmentw w osobnym wtku.
Listing 1.1 zawiera peen tekst rdowy obecnej wersji programu.

Listing 1.1. Bounce.java


 * +
 * +
 * +
 * +
 *,! +
-++
'$***.$*!/ 01
+ $$!! $

 $!$
23!

45  $5

!% 6!7 
4589:7;:6&7
!<!
 
)
)
-++
01  !=*.$!/**.$1 /=
1  
+$!!

-++
=!  01/!/ * =>$*?=*.$1 1 $# ?
*@1 /A
+ $
B$C% !

,,
>>

, !D8


, !D8

,E,
)

,89FG !D,8


, !D,8
E89F
,E,
)

Rozdzia 1. n Wielowtkowo

> !D(


> !D(

>E>
)

>(9FG !D,(


> !D,(
E(9F
>E>
)
)
-++
 =>1!=0 01H.$* =>$*
+ $ !C%# 


   !C%% 
,?>?89F?(9F
)
 !$89FI
 !$(9FI
  ,J
  >J
  ,
  >
)
-++
>! *.$> 01
+$!!,!4

-++
%* 01/  
K   01
+ $


!

)
 $ 6 
" #$!

!  6 

" #$!C%C
" #$!C% 

L!

C
# 

)
)
 '>&!G! '>&!G

)
-++
B1= *.$0 =>$!1

21

22

Java 2. Techniki zaawansowane


+$!! $5,!45

-++
M! *1/= *.$. ? 1N* /= 01
 1= =>$!16!
+ $ $5


!=
%5'O&:P9%Q?%5'O&:Q9"Q
!
R $R
  


?&> 6;B
4  4

 
 ?RR?
 '$&!


 $$
'$



)
)
 
 ?R6!R?
 '$&!


 $$
'$

>!,
J
)
)

 ?&> 7OQ
)
-++
%* =>$!11
K $1
K =  =>$!1
K !1!0 $# *.$> =>$!1
+ $ 
6$??'$&!!

4   4 

$
 
 '$&!
!
)
-++
%* 01/ 
B>! * 01/ **.JJJ=>
+ $


>

Rozdzia 1. n Wielowtkowo

23


 

 


  


 !

  
" #$!

#!
%&'(
)
)
$$#
9 ,$ 

)
)
  
 $!$%5'O&:P9%QSIJ
 $!$%5'O&:Q9"QTIJ
 $!$JJJ
 $!$%&'(T
)


 
n  
 

zawiesza wykonanie wtku na okrelon liczb

milisekund.
Parametry:

 liczba milisekund zawieszenia wtku

Zastosowanie wtkw
Program animacji piki moe lepiej odpowiada na akcje uytkownika, jeli kod odpowiedzialny za animacj umiecimy w osobnym wtku. Rozwizanie takie pozwoli nam nawet
animowa wiele piek. Animacja kadej z nich odbywa bdzie si w osobnym wtku.
Rwnolegle z wtkami animacji dziaa bdzie rwnie wtek obsugi zdarze AWT zajmujcy si obsug zdarze zwizanych z interfejsem uytkownika. Poniewa wszystkie
wtki maj rwn szans wykonania, to gwny wtek programu moe teraz uzyska infomacj o wybraniu przez uytkownika przycisku Close i odpowiednio zareagowa na to zdarzenie. A oto prosty sposb na uruchomienie zadania w osobnym wtku:
1. Kod realizujcy zadanie umieszczamy wewntrz metody  klasy implementujcej
interfejs . Interfejs ten jest bardzo prosty i posiada tylko jedn metod:
$$B 

 

)

Klas implementujc ten interfejs tworzymy w nastpujcy sposb:

24

Java 2. Techniki zaawansowane


$!!D>B  !B 

 $ 



)
)

2. Nastpnie tworzymy obiekt naszej klasy:


B  D>B 

3. Tworzymy obiekt  na podstawie obiektu :


# #


4. Uruchamiamy wtek:
!

Aby kod animacji piki wykonywany by we wasnym wtku, wystarczy umieci go wewntrz metody  klasy :
$!!B  !B 


 $ 


>


  


$  !

$  

#!
%&'(
)
)
$$#
9 ,$ 

)
)

)

Powyszy fragment kodu zawiera take obsug wyjtku  



, ktrego
wystpienie moe spowodowa metoda 
. Wyjtek ten omwimy w nastpnym punkcie. Typowo, aby zakoczy wykonywanie wtku, przerywa si jego dziaanie. Zgodnie
z t zasad wystpienie wyjtku  

 spowoduje zakoczenie wykonywania naszej metody .
Za kadym razem, gdy uytkownik wybierze przycisk Start, metoda  uruchamia
nowy wtek (patrz rysunek 1.2):
 



B  B 
? 
# #

!

Rozdzia 1. n Wielowtkowo

25

Rysunek 1.2.
Animacja
wielowtkowa

I to wszystko! W ten sposb dowiedziae si, w jaki sposb uruchamia rwnolegle dziaajce wtki. Pozostaa cz tego rozdziau powicona jest interakcjom pomidzy wtkami.
Wtek moemy rwnie zdefiniowa, tworzc klas pochodn klasy :
$!!D>#,!#

 $ 



)
)

Nastpnie tworzymy obiekt tej klasy pochodnej i wywoujemy jego metod  . Rozwizanie takie nie jest jednak zalecane. Naley dy do oddzielenia wykonywanego
zadania od mechanizmu jego wykonywania. W sytuacji, gdy musimy wykona du liczb zada, tworzenie wtku dla kadego z nich jest zbyt kosztowne i lepiej jest wykorzysta pul wtkw (patrz strona 83.).

Nie naley wywoywa bezporednio metody  zostanie ona wywoana przez metod  , w momencie gdy wtek jest gotowy do rozpoczcia dziaania. Bezporednie wywoanie metody  spowoduje jej wykonanie w biecym wtku zamiast utworzenia nowego.

Listing 1.2 zawiera kompletny kod animacji wielowtkowej.


Listing 1.2. BounceThread.java
 * +
 * +
 * +
 * +
 *,! +

26

Java 2. Techniki zaawansowane


-++
'$***.$*!/ 01
+ $$!! $#

 $!$
23!

45  $5

!% 6!7 
4589:7;:6&7
!<!
 
)
)
-++
'$***.$*!/ 01
+$!!B  !B 

-++
M! 1
K 01
K1 ? 1N>/= 
+ $B 
?6 6 


$ 6 
)
 $ 


>


  


$  !

$  

#!
%&'(
)
)
$$#
9 ,$ 

)
)
 
 6 $ 
 $!$JJJ
 $!$%&'(I
)
-++
01  !=*.$!/**.$1 /=
1  
+$!!


Rozdzia 1. n Wielowtkowo
-++
=!  01/!/ * =>$*?=*.$1 1 $# ?
*@1 /A
+ $
B$C% !

,,
>>

, !D8


, !D8

,E,
)

,89FG !D,8


, !D,8
E89F
,E,
)

> !D(


> !D(

>E>
)

>(9FG !D,(


> !D,(
E(9F
>E>
)
)
-++
 =>1!=0 01H.$* =>$*
+ $ !C%# 


   !C%% 
,?>?89F?(9F
)
 !$89FI
 !$(9FI
  ,J
  >J
  ,
  >
)
-++
>! *.$> 01/
+$!!,!4

-++
%* 01/ 
K   01
+ $


!


27

28

Java 2. Techniki zaawansowane


)
 $ 6 
" #$!

!  6 

" #$!C%C
" #$!C% 

L!

C
# 

)
)
 '>&!G! '>&!G

)
-++
B1= *.$  =>$!1
+$!! $5,!45

-++
M! *1/= ? 1N* /= 01
 !=$= =>$!16!
+ $ $5


!=
%5'O&:P9%Q?%5'O&:Q9"Q
!
R $#R
  


?&> 6;B
4  4

 
 ?RR?
 '$&!


 $$
'$



)
)
 
 ?R6!R?
 '$&!


 $$
'$

>!,
J
)
)

 ?&> 7OQ
)
-++
%* =>$!11
K $1
K =  =>$!1
K !1!0 $# *.$> =>$!1
+-

Rozdzia 1. n Wielowtkowo

29

 $ 


6$??'$&!!

4   4 

$
 
 '$&!
!
)
-++
 => 01/  $# > .1**$*
+ $


 

 

B  B 
? 
# #

!

)
  
 $!$%5'O&:P9%QSIJ
 $!$%5'O&:Q9"QTIJ
 $!$JJJ
 $!$%&'(T
)


 
n   tworzy

nowy wtek, ktry wykonywa bdzie metod

run obiektu  .

n   

uruchamia ten wtek i powoduje wywoanie metody . Metoda


  oddaje natychmiast sterowanie do metody, ktra j wywoaa, a nowy wtek

wykonywany jest rwnolegle.


n  

wywouje metod  odpowiedniego obiektu implementujcego


interfejs .

 
n  

t metod naley zastpi wasn wersj zawierajc kod, ktry ma


by wykonywany w nowym wtku.

Przerywanie wtkw
Wykonanie wtku koczy si w momencie, gdy metoda  zwraca sterowanie. (W pierwszej wersji jzyka Java istniaa take metoda 
, za pomoc ktrej jeden wtek mg zakoczy wykonywanie innego. Obecnie metoda ta nie jest stosowana, a przyczyny tego
omwimy w dalszej czci rozdziau).

30

Java 2. Techniki zaawansowane


Obecnie nie istnieje wic sposb, aby wymusi zakoczenie wtku. Mona jednak zada
zakoczenia wtku za pomoc metody  
.
Wywoanie metody  
 powoduje nadanie wtkowi statusu przerwania. Status ten
jest reprezentowany za pomoc znacznika logicznego. Warto tego znacznika powinna
by okresowo sprawdzana przez wtek.
Aby sprawdzi status przerwania wtku, naley najpierw wywoa metod statyczn 
  , aby uzyska biecy wtek, a nastpnie wywoa metod   

sprawdzajc jego status:
#
6JTGCFEWTTGPV6JTGCF
KU+PVGTTWRVGF
UU!.=0 >1


  
)

Jednak wtek, ktrego wykonywanie zostao zablokowane, nie moe sprawdzi wasnego
statusu przerwania. I wanie w takim przypadku pomocny jest wyjtek  


. Jeli metoda  
 zostanie wywoana dla wtku, ktrego wykonanie jest zablokowane, to blokujca go metoda 
lub  zostanie przerwana i pojawi si wyjtek
 

.
rodowisko jzyka Java nie wymaga wcale, aby wtek przerwany w taki sposb zakoczy
swoje wykonywanie. Przerwanie wtku sygnalizuje jedynie pojawienie si pewnego dania. Przerwany wtek sam decyduje, w jaki sposb zareagowa na takie danie. Wykonanie niektrych wtkw w programie moe by na tyle wane, e po prostu zignoruj one
wyjtek i kontynuowa bd swoje dziaanie. Najczciej jednak wtek zinterpretuje wyjtek jako danie zakoczenia wykonywania. Metoda  takiego wtku wyglda wtedy nastpujco:
$ 


>


 #
V#$ #
!9 
UU!.=0 >1


  
)
)
$$#
9 ,$ ,$ 

-- .1 = > 1$>!   
)
>

       
)
--=1W$= >1> > >!> .1
)

Sprawdzenie statusu przerwania wtku za pomoc metody   


 nie jest konieczne,
gdy metoda 
wywoywana jest po kadej iteracji przetwarzania. Gdy wtek posiada
status przerwania, to wywoanie metody 
spowoduje wystpienie wyjtku  


Rozdzia 1. n Wielowtkowo

31


. Dlatego te, gdy metoda 
wywoywana jest w ptli, to nie musimy
sprawdza statusu przerwania wtku. Wystarczy jedynie zaj si obsug wyjtku  


. Metoda  posiada wtedy nastpujc posta:
$ 


>


 #
!.=0 >1

 >1*=0
#!
>
)
)
$$#
9 ,$ ,$ 

-- .1 = > 1$>!   
)
>

       
)
--=1W$= >1> > >!> .1
)

Wygenerowanie wyjtku  



 przez metod 
kasuje status
przerwania wtku.

Istniej dwie podobne metody,  


 oraz   
. Metoda  

jest statyczn metod, ktra sprawdza, czy biecy wtek zosta przerwany. Dodatkowo wywoanie metody  
 kasuje status przerwania wtku. Natomiast metoda   
 wywoywana jest dla konkretnej instancji wtku i umoliwia sprawdzenie statusu przerwania dowolnego wtku. Jej wywoanie nie zmienia tego statusu.

Czsto mona spotka fragmenty kodu, w ktrych obsuga wystpienia wyjtku  



 jest pominita, co wida poniej:

>!
> )
$$#
9 ,$ ,$  )--X&V

Nie wolno pisa programw w ten sposb! Jeli nie wiemy, jak obsuy wyjtek w klauzuli  , to zawsze mamy jeszcze dwie inne moliwoci:
n

W klauzuli  wywoa    


 w celu nadania
wtkowi statusu przerwania, ktry moe by sprawdzony przez kod wywoujcy.
> !1



>!
> )
$$#
9 ,$  #$ #
 
)

)

32

Java 2. Techniki zaawansowane


n

Lepsze rozwizanie polega na zadeklarowaniu metody jako  


 

 i pominiciu bloku  . Dziki temu kod wywoujcy
metod (lub w kocu sama metoda ) bdzie mg obsuy wyjtek.
> !1
# !9 ,$ 


!
>

)


 
n  


wysya danie przerwania wtku. Status przerwania wtku


przyjmuje wtedy warto  . Jeli wykonanie wtku jest zablokowane przez
wywoanie metody 
lub , to wystpuje wyjtek  

.

n  
 sprawdza,

czy biecy wtek (czyli ten, ktry j


wywoa) otrzyma danie przerwania. Zwrmy uwag, e jest to metoda
statyczna. Jej wywoanie posiada efekt uboczny w postaci skasowania statusu
przerwania biecego wtku.

n   
 sprawdza,

czy wtek otrzyma danie przerwania.


Nie powoduje skasowania statusu przerwania wtku w przeciwiestwie do metody
 
.

n     zwraca

obiekt klasy  reprezentujcy

aktualnie wykonywany wtek.

Stany wtkw
Wtki mog znajdowa si w jednym z czterech stanw:
n

nowym,

wykonywalnym,

zablokowanym,

martwym.

Kady z wymienionych stanw omwiomy w kolejnych podrozdziaach.

Nowe wtki
Kiedy tworzymy wtek za pomoc operatora  na przykad   nie jest on
jeszcze wykonywany. Znajduje si wtedy w stanie nowy i kod w nim zawarty nie jest wykonywany. Zanim zostanie uruchomiony, system musi wykona jeszcze pewne operacje.

Rozdzia 1. n Wielowtkowo

33

Wtki wykonywalne
Po wywoaniu metody   wtek jest wykonywalny. Wykonywalny wtek nie musi by
od razu wykonywany. Przydzia procesora zaley bowiem od systemu operacyjnego. Kiedy
zostanie przydzielony, mwimy, e wtek jest wykonywany. (Dokumentacja jzyka Java nie
przewiduje w tym przypadku oddzielnego stanu wtku, wtek wykonywany znajduje si
nadal w stanie wykonywalnym).
Wtek nie powinien by wykonywany w sposb cigy. Podane jest, aby kady z wtkw
cyklicznie zawiesza swoje wykonanie, dajc tym samym szans innym wtkom. Szczegy
szeregowania wtkw zale take od systemu operacyjnego. Systemy stosujce szeregowanie z wydziedziczaniem udostpniaj kademu wtkowi wykonywalnemu przedzia czasu,
w ktrym moe on wykonywa swoje zadania. Gdy przedzia ten zakoczy si, system operacyjny wywaszcza wtek, dajc okazj wykonania kolejnemu wtkowi (patrz rysunek 1.4). Wybierajc ten wtek, system operacyjny bierze pod uwag priorytety wtkw (patrz strona 36.).
Wszystkie wspczesne systemy operacyjne stacji roboczych i serwerw stosuj szeregowanie z wywaszczaniem, natomiast proste urzdzenia, takie jak na przykad telefony komrkowe, mog uywa szeregowania kooperacyjnego. W takim przypadku wtek przestaje by wykonywany dopiero wtedy, gdy sam wywoa odpowiedni metod w rodzaju

czy .
W systemach posiadajcych wiele procesorw kady procesor moe wykonywa inny wtek. Mamy wtedy sytuacj, w ktrej wtki rzeczywicie wykonywane s rwnolegle. Jeli
jednak wtkw jest wicej ni procesorw, to szeregowanie wtkw znowu musi odbywa
si z podziaem czasu.
Naley pamita, e wtek bdcy w stanie wykonywalnym w danym momencie moe by
wykonywany lub nie (dlatego stan ten okrelamy jako wykonywalny, a nie wykonywany).

Wtki zablokowane
Wtek znajduje si w stanie zablokowanym, w przypadku gdy zasza jedna z poniszych
sytuacji:
n

Wywoana zostaa metoda 


danego wtku.

Wykonanie wtku zostao zablokowane przez operacj wejcia-wyjcia,


ktra zwrci sterowanie do wtku, gdy zakoczy swoje dziaanie.

Wtek prbuje zablokowa dostp do obiektu, ktry zosta ju zablokowany


przez inny wtek. Blokady obiektw omwimy w dalszej czci tego rozdziau,
na stronie 46.

Wtek oczekuje na spenienie pewnego warunku patrz strona 49.

Wywoana zostaa metoda 


 danego wtku. Nie jest ona obecnie stosowana
i nie powinna by uywana w programach. Przyczyn tego stanu rzeczy omwimy
w dalszej czci tego rozdziau.

34

Java 2. Techniki zaawansowane


Rysunek 1.3 pokazuje diagram stanw wtku. Kiedy wtek zostaje zablokowany lub zakoczony, rozpoczyna si wykonywanie kolejnego wtku. Kiedy zablokowany wtek zostaje ponownie aktywowany (poniewa upyn okres czasu, na ktry zawiesi on swoje wykonywanie bd zakoczya si blokujca go operacja wejcia-wyjcia), program szeregujcy wtki
sprawdza, czy posiada on priorytet wyszy od aktualnie wykonywanego wtku. Jeli tak, to
wywaszcza biecy wtek i rozpoczyna wykonywanie reaktywowanego wtku.

Rysunek 1.3.
Diagram
stanw wtku

Wtek moe powrci ze stanu zablokowanego do stanu wykonywalnego, przebywajc na


diagramie jedn z nastpujcych drg.
1. Jeli wtek zawiesi wykonywanie wywoujc metod 
, musi upyn

okrelona liczba milisekund.


2. Jeli wtek zosta zablokowany przez operacj wejcia-wyjcia, to musi ona si

zakoczy.
3. Jeli wtek zamierza uzyska blokad obiektu posiadan przez inny wtek,

to wtek ten musi zrzec si blokady obiektu. (Moliwe jest rwnie oczekiwanie
na zwolnienie blokady z okrelonym limitem czasu. Wtedy wtek zostaje
odblokowany po jego upywie).
4. Jeli wtek oczekuje na spenienie pewnego warunku, to jego zajcie musi

zosta zasygnalizowane przez inny wtek. (Moliwe jest rwnie oczekiwanie


na spenienie warunku z okrelonym limitem czasu. Wtedy wtek zostaje
odblokowany po jego upywie).
5. Jeli wtek zawiesi swoje wykonywanie, to inny wtek musi wywoa jego metod
 . Stosowanie metod 
 i   nie jest jednak zalecane.

Rozdzia 1. n Wielowtkowo

35

Zablokowany wtek moe powrci do stanu wykonywalnego jedynie t sam drog, na


ktrej zosta zablokowany. W szczeglnoci nie wystarczy wywoanie metody  , aby
odblokowa wtek.
Dla odblokowania operacji wejcia i wyjcia naley stosowa mechanizm kanaw oferowany przez now bibliotek wejcia i wyjcia. Gdy inny wtek zamyka kana, to zablokowany wtek powraca do stanu wykonywalnego, a blokujca operacja generuje wyjtek   
.

Wtki martwe
Wtek moe by martwy gdy zaistnieje jeden z dwch powodw.
n

Zakoczy si wykonywanie metody  w prawidowy sposb.

Wykonanie metody  zostanie przerwane ze wzgldu na wystpienie wtku,


ktrego metoda ta nie obsuguje.

W szczeglnoci moliwe jest zabicie wtku przez wywoanie metody 


. Powoduje
ona wystpienie bdu ! , co koczy wykonywanie wtku. Metoda ta niesie ze
sob pewne zagroenia (omwimy je w dalszej czci rozdziau) i nie powinna by stosowana w programach.
Aby uzyska informacj o tym, czy dany wtek yje (czyli jest wykonywalny lub zablokowany), stosujemy metod  ". Zwraca ona warto logiczn  , gdy wtek jest
wykonywalny lub zablokowany albo warto # , jeli jest nowy bd martwy.
Nie mona uzyska informacji o tym, czy dany wtek jest wykonywalny, czy te zablokowany, a take informacji o tym, czy jest w danej chwili wykonywany. Podobnie nie
mona rozrni stanu wtku, w ktrym nie jest on jeszcze wykonywalny, od stanu,
w ktrym jest ju martwy.


 
n  " zwraca

warto  , jeli wtek ju rozpocz dziaanie

i jeszcze si nie zakoczy.


n  
 koczy
n  


wykonanie wtku. Uycie tej metody nie jest zalecane.

zawiesza wykonanie wtku. Uycie tej metody nie jest zalecane.

n    podejmuje

wykonanie wtku zawieszonego metod 


.
Uycie obu metod nie jest zalecane.

n $oczekuje

zakoczenia dziaania okrelonego wtku.

n $ oczekuje

lub upywu  milisekund.

zakoczenia dziaania okrelonego wtku

36

Java 2. Techniki zaawansowane

Waciwoci wtkw
W kolejnych punktach omwione zostan inne waciwoci wtkw: priorytety, wtkidemony, grupy wtkw i domylne procedury obsugi wyjtkw.

Priorytety wtkw
W jzyku Java z kadym wtkiem zwizany jest okrelony priorytet. Domylnie wtek dziedziczy priorytet po swoim wtku nadrzdnym, czyli wtku, ktry go utworzy. Mona go jednak zmniejszy lub zwikszy, stosujc metod %   . Za jej pomoc mona priorytetowi nada dowoln warto z przedziau od &'(%) * (zdefiniowane jako 1 w klasie
) do &"+(%) * (zdefiniowane jako 10). Priorytet ')&(%) * posiada warto 5.
Gdy program szeregowania wtkw musi wybra nowy wtek, zawsze wybiera wtek wykonywalny o najwyszym priorytecie. Naley zaznaczy, e wszelkie zasady dziaania zwizane z priorytetami wtkw s w znacznym stopniu zalene od konkretnego systemu operacyjnego. Jeli maszyna wirtualna jzyka Java wykorzystuje zarzdzanie wtkami danej
platformy, to musi dokona odwzorowania priorytetw wtkw zdefiniowanych w jzyku
Java na poziomy priorytetw tej platformy (ktrych moe by mniej lub wicej ni wartoci
priorytetw w jzyku Java).
Na przykad w systemie Windows NT/XP istnieje siedem poziomw priorytetw, mniej ni
definiuje to Java. Niezalenie wic od sposobu odwzorowanie priorytetw zdarza si bdzie,
e wtki, ktre maj rny priorytet w jzyku Java, bd posiada w rzeczywistoci ten sam
priorytet z punktu widzenia systemu operacyjnego. W przypadku maszyny wirtualnej Java
firmy Sun dla systemu Linux informacja o priorytetach wtkw jest w ogle ignorowana.
Z tego powodu naley traktowa priorytety wtkw jedynie jako rodzaj wskazwki dla
programu szeregujcego. W adnym wypadku nie naley tworzy programw, ktrych poprawne dziaanie zaley od poziomw priorytetw.
Jeli zamierzasz uywa priorytetw wtkw, to powiniene wiedzie o bdzie popenianym czsto przez pocztkujcych. Jeli w programie istnieje kilka wtkw o wysokim priorytecie, ktre rzadko znajduj si w stanie zablokowanym, to mog one uniemoliwi wykonywanie wtkw o niskim priorytecie. Program szeregujcy wtki zawsze
wybiera najpierw spord wtkw o wyszym priorytecie, nawet jeli w ten sposb
wtki o niszym priorytecie nie s nigdy wykonywane.


 
n  %   %    okrela

priorytet wtku. Warto priorytetu


musi znajdowa si w przedziale od &'(%) * do &"+(%) *.
Priorytet zwykego wtku posiada warto ')&(%) *.

n &'(%) * minimalna
n ')&(%) *

warto priorytetu wtku (wynosi 1).

domylna warto priorytetu wtku (wynosi 5).

Rozdzia 1. n Wielowtkowo
n &"+(%) * maksymalna

37

warto priorytetu wtku (wynosi 10).

n   zawiesza

wykonanie biecego wtku. Kolejnym


wykonywanym wtkiem bdzie wtek wykonywalny, o co najmniej takim samym
priorytecie jak wtek zawieszony. Metoda statyczna.

Wtki-demony
Wtek staje si wtkiem-demonem przez wywoanie
!%
 

Wtek-demon nie ma w sobie nic demonicznego. Jest to po prostu wtek, ktrego jedynym
zadaniem jest suenie innym wtkom. Przykadem wtkw-demonw mog by wtki zegara, ktre dostarczaj innym wtkom informacji o upywie czasu. Jeli dla danego programu pozostaje jedynie wtek-demon, to program koczy swoje dziaania.


 
n  ! !

oznacza dany wtek jako wtek-demon bd


wtek uytkownika. Jeli aktywne s tylko wtki-demony, to program koczy
swoje dziaanie. Metoda ta musi by wywoana przed wystartowaniem wtku.

Grupy wtkw
Niektre programy wykonuj wiele wtkw. Przydatna wtedy okazuje si moliwo kategoryzacji na podstawie ich funkcji. Jako przykad wemy przegldark internetow. Jeli
wiele wtkw zajmuje si adowaniem rnych obrazkw zamieszczonych na danej stronie,
a uytkownik wybierze przycisk Stop, to wykonywanie wszystkich tych wtkw powinno
zosta przerwane. Java pozwala tworzy w tym celu grupy wtkw.
Grup wtkw tworzymy, wywoujc konstruktor klasy , 
:
 ;
#"  #"
 ;

acuch znakw bdcy parametrem konstruktora identyfikuje grup wtkw i musi by unikalny. Wtki dodajemy do danej grupy, okrelajc j za pomoc parametru konstruktora wtku.
# #
?#;

Aby dowiedzie si, czy istnieje jaki wykonywalny wtek danej grupy, uywamy metody
.

$6 
J

-- !=>!1 .1* >=1W$=>0>=0
)

38

Java 2. Techniki zaawansowane


Aby przerwa wykonywanie wszystkich wtkw danej grupy, wywoujemy metod  

 obiektu reprezentujcego dan grup.
 
-- =>  !=>!1 .1  

Ten sam efekt moemy osign bez uywania grup wtkw, lecz za pomoc egzekutorw
(patrz strona 88.).
Grupy wtkw mog posiada podgrupy. Domylnie nowo tworzona grupa wtkw staje
si podgrup biecej grupy. Grup nadrzdn mona take okreli za pomoc parametru
konstruktora grupy (patrz opis konstruktora). Metody  oraz  
 odnosz
si do wszystkich wtkw w grupie oraz jej podgrup.


 
n  , 
-. 

tworzy nowy wtek nalecy do danej grupy

wtkw.
Parametry:




grupa wtkw, do ktrej nalee bdzie nowy wtek,


nazwa nowego wtku.

n , 
 , 
 zwraca

grup wtkw, do ktrej naley dany wtek.


 
 
n , 
. 

tworzy now grup wtkw. Grupa ta stanowi bdzie


podgrup grupy, do ktrej naley biecy wtek.
Parametry:



nazwa nowej grupy wtkw.

n , 
 , 

 -. 

Parametry:

tworzy now grup wtkw.

  grupa nadrzdna tworzonej grupy,




nazwa nowej grupy wtkw.

n  zwraca

liczb wtkw aktywnych danej grupy.

n   /0  pobiera referencje

do wszystkich wtkw
aktywnych w danej grupie; aby okreli rozmiar tablicy referencji, warto uy
metody ; moe zdarzy si, e tablica okae si za maa (na przykad
gdy po uyciu metody  utworzono duo nowych wtkw), wtedy
znajd si w niej referencje do czci wtkw.
Parametry:

 

tablica, w ktrej maj znale si referencj wtkw.

n , 
% pobiera
n  
przerywa

grup nadrzdn danej grupy.

wszystkie wtki danej grupy i jej wszystkich podgrup.

Rozdzia 1. n Wielowtkowo

39

Procedury obsugi wyjtkw


Metoda  wtku nie moe wygenerowa weryfikowalnego wyjtku, ale jej dziaanie moe zosta zakoczone przez wyjtek nieweryfikowalny. W takim przypadku wtek koczy
swoje istnienie.
W sytuacji tej nie istnieje klauzula  , do ktrej mogaby zosta przekazana obsuga
wyjtku. Dlatego te, zanim wtek zakoczy dziaanie, obsuga wyjtku zostaje przekazana
do procedury obsugi wyjtkw.
Procedura ta musi nalee do klasy, ktra implementuje interfejs 1 

2 . Interfejs ten skada si z pojedynczej metody
 $ #,$ 
#?# 

Poczwszy od JDK 5.0 metoda 1 


2 pozwala nam zainstalowa
wasn procedur obsugi wyjtkw dla dowolnego wtku. Metoda statyczna !#
1 
2 naleca do klasy  umoliwia zainstalowanie domylnej
procedury obsugi wyjtkw dla wszystkich wtkw programu. Procedura taka moe, na
przykad, uywa interfejsu programowego dziennikw do tworzenia raportw o wyjtkach
nieobsuonych.
Jeli nie zainstalujemy domylnej procedury obsugi wyjtkw dla wszystkich wtkw, to
bdzie ona . Natomiast gdy nie zainstalujemy takiej procedury dla poszczeglnych
wtkw, to procedura ta nalee bdzie do obiektu , 
dla danego wtku.
Klasa , 
implementuje interfejs 1 
2 . Metoda 
 
 tej klasy wykonuje podejmuje nastpujce dziaania:
1. Jeli dana grupa wtkw naley do grupy nadrzdnej, to wywoywana jest metoda
 
 grupy nadrzdnej.
2. W przeciwnym razie, jeli metoda !#
2 zwraca
procedur obsugi rn od , to zostaje ona wywoana.
3. W przeciwnym razie, gdy  jest instancj ! , nie jest

wykonywana adna operacja.


4. W przeciwnym razie nazwa wtku i zrzut stosu dla  zostaj zapisane
w .  .

Wspomniany zrzut stosu znany jest dobrze wszystkim piszcym programy w jzyku Java.
W wersjach wczeniejszych ni JDK 5.0 nie istniaa bezporednia moliwo zainstalowania wasnej procedury obsugi wyjtkw dla wszystkich wtkw ani dla poszczeglnych wtkw. W tym celu naleao stworzy klas pochodn klasy , 

i przesoni jej metod  


 wasn wersj.

40

Java 2. Techniki zaawansowane


 
n  !#1 
2  1 


2    5.0

n  1 


2

!#1 
2  5.0 konfiguruje lub pobiera domyln

procedur obsugi wyjtkw.


n  1 
2  1 
2    5.0
n 1 
2 1 
2  5.0 konfiguruje

lub pobiera procedur obsugi wyjtkw. Jeli adna taka procedura nie zostanie
skonfigurowana, to uywana jest w tym celu grupa, do ktrej naley wtek.


    

n  
 - . Metod

t definiujemy, aby
uzyska raport, gdy dziaanie wtku zostao zakoczone na skutek nieobuonego
wyjtku.
Parametry:

wtek zakoczony na skutek wyjtku, ktry nie zosta


obsuony,

wyjtek, ktry nie zosta obsuony.


 
 
n  
 - . Metod

t zastpujemy wasn
wersj, aby reagowa na wyjtki powodujce zakoczenie wtkw tej grupy.
Domylna implementacja wywouje t sam metod grupy nadrzdnej, a jeli grupa
nadrzdna nie istnieje, to wysya zrzut stosu do standardowego strumienia bdw.
(Jeli  jest obiektem klasy ! , to informacja o zawartoci stosu nie jest
wysyana. Obiekty klasy ! generowane s przez metod 
, ktrej nie
naley stosowa).

You might also like