Kompletne i niezastąpione źródło wiedzy dla doświadczonych programistów
Kolejne wydanie doskonałego przewodnika po zaawansowanych możliwościach Javy
Wszystkie kody źródłowe w książce zaktualizowane do J2SE 5.0
Szczegółowe omówienie wielowątkowości, kolekcji, programowania aplikacji sieciowych i bazodanowych, bezpieczeństwa i internacjonalizacji aplikacji, obiektów rozproszonych i języka XML
Kolejne już wydanie przewodnika opisującego zaawansowane i nieznane właściwości języka Java, tym razem w wersji 5.0, to kompendium wiedzy dla wszystkich programistów zamierzających tworzyć rozbudowane aplikacje. Nowa wersja języka Java to nie tylko nowy numer -- to przede wszystkim ogromna ilość nowych funkcji i możliwości, klas i obiektów. W JDK 5.0 wprowadzono nowe mechanizmy obsługi wątków i kolekcji, rozszerzono możliwości biblioteki Swing i klas wykorzystywanych do tworzenia aplikacji bazodanowych i sieciowych. 'Java 2. Techniki zaawansowane. Wydanie II' przedstawia i opisuje wszystkie te nowości.
Wszystkie przykładowe programy zostały zaktualizowane do najnowszej wersji Javy i przedstawiają praktyczne rozwiązania rzeczywistych problemów, z jakimi może spotkać się twórca aplikacji w języku Java.
Książka zawiera wiele nowych podrozdziałów poświęconych nowościom wprowadzonym w J2SE 5.0. Dokładnie i na przykładach opisuje zagadnienia związane z wielowątkowością, kolekcjami, metadanymi, stosowaniem języka XML, komunikacją z bazami danych i wieloma innymi elementami zaawansowanego programowania w Javie.
Aplikacje wielowątkowe
Kolekcje i operacje na nich
Połączenia sieciowe
Interfejs JDBC i LDAP
Aplikacje rozproszone
Technologia CORBA
Zaawansowane możliwości bibliotek Swing i AWT
Technologia JavaBeans
Bezpieczeństwo aplikacji
Internacjonalizacja
Korzystanie z języka XML
Jeśli zamierzasz wykorzystać Javę w złożonym projekcie informatycznym, ta książka będzie dla Ciebie niezastąpiona.
Darmowy fragment publikacji:
IDZ DO
IDZ DO
PRZYK£ADOWY ROZDZIA£
PRZYK£ADOWY ROZDZIA£
SPIS TREĎCI
SPIS TREĎCI
KATALOG KSI¥¯EK
KATALOG KSI¥¯EK
KATALOG ONLINE
KATALOG ONLINE
ZAMÓW DRUKOWANY KATALOG
ZAMÓW DRUKOWANY KATALOG
TWÓJ KOSZYK
TWÓJ KOSZYK
Java 2. Techniki
zaawansowane.
Wydanie II
Autorzy: Cay Horstmann, Gary Cornell
T³umaczenie: Jaromir Senczyk
ISBN: 83-7361-842-2
Tytu³ orygina³u: Core Java(TM) 2, Volume II
— Advanced Features (7th Edition)
Format: B5, stron: 1144
Przyk³ady na ftp: 1644 kB
DODAJ DO KOSZYKA
DODAJ DO KOSZYKA
Kompletne i niezast¹pione ĥród³o wiedzy dla doġwiadczonych programistów
CENNIK I INFORMACJE
CENNIK I INFORMACJE
ZAMÓW INFORMACJE
ZAMÓW INFORMACJE
O NOWOĎCIACH
O NOWOĎCIACH
ZAMÓW CENNIK
ZAMÓW CENNIK
CZYTELNIA
CZYTELNIA
FRAGMENTY KSI¥¯EK ONLINE
FRAGMENTY KSI¥¯EK ONLINE
• Kolejne wydanie doskona³ego przewodnika po zaawansowanych mo¿liwoġciach Javy
• Wszystkie kody ĥród³owe w ksi¹¿ce zaktualizowane do J2SE 5.0
• Szczegó³owe omówienie wielow¹tkowoġci, kolekcji, programowania aplikacji
sieciowych i bazodanowych, bezpieczeñstwa i internacjonalizacji aplikacji,
obiektów rozproszonych i jêzyka XML
Kolejne ju¿ wydanie przewodnika opisuj¹cego zaawansowane i nieznane w³aġciwoġci
jêzyka Java, tym razem w wersji 5.0, to kompendium wiedzy dla wszystkich programistów
zamierzaj¹cych tworzyæ rozbudowane aplikacje. Nowa wersja jêzyka Java to nie tylko nowy
numer -- to przede wszystkim ogromna iloġæ nowych funkcji i mo¿liwoġci, klas i obiektów.
W JDK 5.0 wprowadzono nowe mechanizmy obs³ugi w¹tków i kolekcji, rozszerzono
mo¿liwoġci biblioteki Swing i klas wykorzystywanych do tworzenia aplikacji bazodanowych
i sieciowych. „Java 2. Techniki zaawansowane. Wydanie II” przedstawia i opisuje wszystkie
te nowoġci.
Wszystkie przyk³adowe programy zosta³y zaktualizowane do najnowszej wersji Javy
i przedstawiaj¹ praktyczne rozwi¹zania rzeczywistych problemów, z jakimi mo¿e spotkaæ siê
twórca aplikacji w jêzyku Java. Ksi¹¿ka zawiera wiele nowych podrozdzia³ów poġwiêconych
nowoġciom wprowadzonym w J2SE 5.0. Dok³adnie i na przyk³adach opisuje zagadnienia
zwi¹zane z wielow¹tkowoġci¹, kolekcjami, metadanymi, stosowaniem jêzyka 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 wielow¹tkowe
• Kolekcje i operacje na nich
• Po³¹czenia sieciowe
• Interfejs JDBC i LDAP
• Aplikacje rozproszone
• Technologia CORBA
• Zaawansowane mo¿liwoġci bibliotek Swing i AWT
• Technologia JavaBeans
• Bezpieczeñstwo aplikacji
• Internacjonalizacja
• Korzystanie z jêzyka XML
Jeġli zamierzasz wykorzystaæ Javê w z³o¿onym projekcie informatycznym, ta ksi¹¿ka bêdzie
dla Ciebie niezast¹piona.
Spis treści
Podziękowania...................................................n...................................................n..................................... 11
Przedmowa...................................................n...................................................n......................................... 13
Do Czytelnika...................................................n...................................................n........13
O książce ...................................................n...................................................n.............13
Rozdział 1. Wielowątkowość ...................................................n................................................................. 17
Czym są wątki?...................................................n...................................................n.....18
Zastosowanie wątków...................................................n..........................................23
Przerywanie wątków...................................................n..................................................29
Stany wątków ...................................................n...................................................n.......32
Nowe wątki ...................................................n...................................................n.....32
Wątki wykonywalne...................................................n..............................................33
Wątki zablokowane...................................................n..............................................33
Wątki martwe ...................................................n...................................................n..35
Właściwości wątków ...................................................n.................................................36
Priorytety wątków ...................................................n................................................36
Wątki-demony ...................................................n...................................................n..37
Grupy wątków ...................................................n...................................................n..37
Procedury obsługi wyjątków ...................................................n..................................39
Synchronizacja...................................................n...................................................n......40
Przykład wyścigu ...................................................n.................................................41
Wytłumaczenie wyścigu...................................................n........................................45
Blokady...................................................n...................................................n...........46
Warunki ...................................................n...................................................n..........49
Słowo kluczowe synchronized ...................................................n...............................54
Bloki synchronizowane...................................................n.........................................60
Pola volatile ...................................................n...................................................n....61
Zakleszczenia ...................................................n...................................................n..63
Równorzędne traktowanie wątków...................................................n.........................65
Testowanie blokad i limity czasu...................................................n...........................65
Blokady odczytu i zapisu ...................................................n......................................67
Dlaczego metody stop i suspend nie są zalecane? ...................................................n.68
Kolejki blokujące ...................................................n...................................................n...70
Kolekcje...................................................n...................................................n...............76
Efektywne implementacje kolejki i tablicy mieszającej ................................................76
Kolekcje CopyOnWriteArrayList i CopyOnWriteArraySet................................................78
Starsze kolekcje i wielowątkowość...................................................n........................78
4
Java 2. Techniki zaawansowane
Interfejsy Callable i Future...................................................n.........................................78
Egzekutory...................................................n...................................................n............83
Pule wątków ...................................................n...................................................n....83
Wykonywanie zadań według planu...................................................n.........................87
Sterowanie grupami wątków ...................................................n.................................88
Synchronizatory...................................................n...................................................n.....89
Bariery...................................................n...................................................n............90
Rejestry odliczające...................................................n.............................................91
Przekaźniki ...................................................n...................................................n......91
Kolejki synchroniczne ...................................................n..........................................91
Semafory ...................................................n...................................................n........92
Wątki i Swing...................................................n...................................................n........98
Zasada pojedynczego wątku ...................................................n.................................99
Wątek roboczy i Swing ...................................................n....................................... 104
Rozdział 2. Kolekcje...................................................n...................................................n............................111
Interfejsy kolekcji ...................................................n...................................................n 111
Rozdzielenie interfejsów kolekcji od ich implementacji.............................................. 112
Interfejsy Collection i Iterator w bibliotekach języka Java........................................... 114
Kolekcje konkretne...................................................n................................................. 119
Listy powiązane ...................................................n................................................ 120
Klasa ArrayList ...................................................n................................................. 128
Zbiory z kodowaniem mieszającym ...................................................n...................... 129
Zbiory drzewiaste ...................................................n.............................................. 132
Kolejki z priorytetami ...................................................n......................................... 138
Mapy ...................................................n...................................................n............ 139
Specjalizowane klasy zbiorów i map ...................................................n.................... 144
Szkielet kolekcji ...................................................n...................................................n.. 149
Widoki i opakowania...................................................n.......................................... 152
Operacje masowe ...................................................n............................................. 158
Wykorzystanie biblioteki kolekcji z tradycyjnymi bibliotekami ..................................... 159
Rozbudowywanie szkieletu ...................................................n................................. 160
Algorytmy ...................................................n...................................................n........... 163
Sortowanie i tasowanie...................................................n...................................... 164
Wyszukiwanie binarne...................................................n........................................ 167
Proste algorytmy ...................................................n............................................... 168
Programowanie własnych algorytmów ...................................................n.................. 169
Tradycyjne kolekcje...................................................n................................................. 171
Klasa Hashtable ...................................................n............................................... 171
Wyliczenia ...................................................n...................................................n..... 171
Zbiory właściwości ...................................................n............................................ 172
Stosy...................................................n...................................................n............ 173
Zbiory bitów...................................................n...................................................n... 173
Rozdział 3. Programowanie aplikacji sieciowych ...................................................n............................. 179
Połączenia z serwerem ...................................................n........................................... 179
Implementacja serwerów...................................................n......................................... 183
Obsługa wielu klientów ...................................................n...................................... 186
Wysyłanie poczty elektronicznej..................................................n................................. 189
Połączenia wykorzystujące URL ...................................................n................................ 193
URL i URI ...................................................n...................................................n...... 194
Zastosowanie klasy URLConnection do pobierania informacji.................................... 196
Wysyłanie danych do formularzy...................................................n.......................... 205
Spis treści
5
Zaawansowane programowanie przy użyciu gniazdek sieciowych..................................... 214
Limity czasu gniazdek...................................................n........................................ 214
Przerywanie operacji gniazdek ...................................................n............................ 215
Połączenia częściowo zamknięte...................................................n......................... 219
Adresy internetowe...................................................n............................................ 220
Rozdział 4. Połączenia do baz danych: JDBC...................................................n..................................... 225
Architektura JDBC ...................................................n.................................................. 226
Typy sterowników JDBC...................................................n...................................... 227
Typowe zastosowania JDBC ...................................................n............................... 228
Język SQL...................................................n...................................................n........... 230
Instalacja JDBC...................................................n...................................................n... 235
Podstawowe koncepcje programowania przy użyciu JDBC............................................... 235
Adresy URL baz danych...................................................n...................................... 236
Nawiązywanie połączenia ...................................................n................................... 236
Wykonywanie poleceń języka SQL ...................................................n....................... 241
Zaawansowane typy języka SQL ...................................................n.......................... 242
Zarządzanie połączeniami, poleceniami i zbiorami wyników ....................................... 245
Wypełnianie bazy danych...................................................n.................................... 246
Wykonywanie zapytań ...................................................n............................................. 249
Polecenia przygotowane...................................................n..................................... 250
Przewijalne i aktualizowalne zbiory wyników zapytań ...................................................n... 258
Przewijalne zbiory rekordów ...................................................n................................ 259
Aktualizowalne zbiory rekordów...................................................n........................... 262
Metadane...................................................n...................................................n........... 266
Zbiory rekordów ...................................................n...................................................n.. 275
Buforowane zbiory rekordów ...................................................n............................... 276
Transakcje...................................................n...................................................n.......... 285
Punkty kontrolne ...................................................n............................................... 286
Aktualizacje wsadowe (JDBC 2) ...................................................n.......................... 286
Zaawansowane zarządzanie połączeniami ...................................................n................. 289
Wprowadzenie do LDAP...................................................n........................................... 290
Konfiguracja serwera LDAP...................................................n................................. 291
Dostęp do informacji katalogu LDAP...................................................n.................... 294
Rozdział 5. Obiekty rozproszone ...................................................n....................................................... 305
Role klienta i serwera ...................................................n............................................. 306
Wywołania zdalnych metod ...................................................n...................................... 308
Namiastka i szeregowanie parametrów...................................................n................ 309
Dynamiczne ładowanie klas...................................................n................................ 311
Konfiguracja wywołania zdalnych metod ...................................................n.................... 312
Interfejsy i implementacje ...................................................n.................................. 312
Generowanie klasy namiastki ...................................................n............................. 315
Odnajdywanie obiektów serwera ...................................................n......................... 315
Po stronie klienta...................................................n.............................................. 319
Przygotowanie wdrożenia...................................................n.................................... 324
Wdrożenie programu...................................................n.......................................... 326
Przekazywanie parametrów zdalnym metodom ...................................................n........... 329
Przekazywanie lokalnych obiektów...................................................n....................... 329
Przekazywanie zdalnych obiektów...................................................n........................ 341
Zdalne obiekty i metody equals oraz hashCode ...................................................n.... 343
Klonowanie zdalnych obiektów...................................................n............................ 344
6
Java 2. Techniki zaawansowane
Aktywacja obiektów serwera ...................................................n.................................... 344
Java IDL i CORBA ...................................................n...................................................n 350
Język IDL...................................................n...................................................n....... 351
Przykład aplikacji CORBA...................................................n.................................... 356
Implementacja serwerów CORBA ...................................................n........................ 365
Wywołania zdalnych metod i SOAP ...................................................n........................... 370
Rozdział 6. Zaawansowane możliwości pakietu Swing...................................................n.................... 377
Listy ...................................................n...................................................n.................. 377
Komponent JList ...................................................n............................................... 378
Modele list...................................................n...................................................n.... 384
Wstawianie i usuwanie ...................................................n...................................... 388
Odrysowywanie zawartości listy...................................................n........................... 390
Drzewa...................................................n...................................................n............... 395
Najprostsze drzewa ...................................................n........................................... 396
Przeglądanie węzłów...................................................n.......................................... 411
Rysowanie węzłów...................................................n............................................. 412
Nasłuchiwanie zdarzeń w drzewach ...................................................n..................... 419
Własne modele drzew...................................................n........................................ 425
Tabele ...................................................n...................................................n............... 433
Najprostsze tabele ...................................................n............................................ 433
Modele tabel ...................................................n...................................................n. 436
Filtry sortujące ...................................................n.................................................. 445
Rysowanie i edytowanie zawartości komórek...................................................n........ 451
Operacje na wierszach i kolumnach...................................................n..................... 464
Wybór wierszy, kolumn i komórek...................................................n........................ 465
Komponenty formatujące tekst ...................................................n................................ 473
Wskaźniki postępu ...................................................n................................................. 479
Paski postępu ...................................................n.................................................. 480
Monitory postępu ...................................................n.............................................. 484
Monitorowanie postępu strumieni wejścia...................................................n............ 489
Organizatory komponentów...................................................n...................................... 494
Panele dzielone ...................................................n................................................ 495
Panele z zakładkami...................................................n.......................................... 499
Panele pulpitu i ramki wewnętrzne ...................................................n...................... 504
Rozmieszczenie kaskadowe i sąsiadujące...................................................n............ 507
Zgłaszanie weta do zmiany właściwości ...................................................n............... 510
Rozdział 7. Zaawansowane możliwości biblioteki AWT...................................................n..................... 521
Potokowe tworzenie grafiki ...................................................n...................................... 522
Figury...................................................n...................................................n................. 524
Wykorzystanie klas obiektów graficznych...................................................n.............. 526
Pola...................................................n...................................................n................... 539
Ślad pędzla ...................................................n...................................................n........ 543
Wypełnienia...................................................n...................................................n........ 550
Przekształcenia układu współrzędnych ...................................................n...................... 556
Przycinanie ...................................................n...................................................n......... 565
Przezroczystość i składanie obrazów...................................................n......................... 569
Wskazówki operacji graficznych...................................................n................................ 577
Czytanie i zapisywanie plików graficznych...................................................n.................. 583
Wykorzystanie obiektów zapisu i odczytu plików graficznych ...................................... 583
Odczyt i zapis plików zawierających sekwencje obrazów............................................ 585
Spis treści
7
Operacje na obrazach ...................................................n............................................. 595
Dostęp do danych obrazu...................................................n................................... 595
Filtrowanie obrazów...................................................n........................................... 602
Drukowanie ...................................................n...................................................n........ 610
Drukowanie grafiki...................................................n............................................. 611
Drukowanie wielu stron...................................................n...................................... 621
Podgląd wydruku ...................................................n............................................... 623
Usługi drukowania...................................................n............................................. 631
Usługi drukowania za pośrednictwem strumieni...................................................n.... 637
Atrybuty drukowania ...................................................n.......................................... 642
Schowek ...................................................n...................................................n............ 649
Klasy i interfejsy umożliwiające przekazywanie danych.............................................. 650
Przekazywanie tekstu ...................................................n........................................ 651
Interfejs Transferable i formaty danych ...................................................n................ 655
Przekazywanie obrazów za pomocą schowka ...................................................n........ 657
Wykorzystanie lokalnego schowka do przekazywania referencji obiektów....................... 662
Wykorzystanie schowka systemowego do przekazywania obiektów Java...................... 668
Mechanizm „przeciągnij i upuść”..................................................n............................... 672
Cele mechanizmu „przeciągnij i upuść” ...................................................n............... 674
Źródła mechanizmu „przeciągnij i upuść”...................................................n............. 683
Przekazywanie danych pomiędzy komponentami Swing............................................. 688
Rozdział 8. JavaBeans...................................................n...................................................n..................... 693
Dlaczego ziarnka? ...................................................n.................................................. 694
Proces tworzenia ziarnek JavaBeans ...................................................n........................ 695
Wykorzystanie ziarnek do tworzenia aplikacji ...................................................n............. 698
Umieszczanie ziarnek w plikach JAR ...................................................n.................... 699
Korzystanie z ziarnek...................................................n......................................... 700
Wzorce nazw właściwości ziarnek i zdarzeń ...................................................n............... 705
Typy właściwości ziarnek ...................................................n......................................... 708
Właściwości proste ...................................................n........................................... 708
Właściwości indeksowane...................................................n.................................. 709
Właściwości powiązane...................................................n...................................... 710
Właściwości ograniczone ...................................................n................................... 712
Klasa informacyjna ziarnka...................................................n...................................... 718
Edytory właściwości ...................................................n................................................ 723
Implementacja edytora właściwości...................................................n..................... 730
Indywidualizacja ziarnka ...................................................n.......................................... 744
Implementacja klasy indywidualizacji ...................................................n................... 746
Trwałość ziarnek JavaBeans ...................................................n.................................... 753
Zastosowanie mechanizmu trwałości JavaBeans dla dowolnych danych...................... 758
Kompletny przykład zastosowania trwałości JavaBeans ............................................ 764
Rozdział 9. Bezpieczeństwo ...................................................n............................................................... 775
Ładowanie klas...................................................n...................................................n... 776
Implementacja własnej procedury ładującej...................................................n.......... 779
Weryfikacja kodu maszyny wirtualnej ...................................................n........................ 784
Menedżery bezpieczeństwa i pozwolenia ...................................................n................... 789
Bezpieczeństwo na platformie Java 2 ...................................................n.................. 791
Pliki polityki bezpieczeństwa...................................................n............................... 794
Tworzenie własnych klas pozwoleń...................................................n...................... 801
Implementacja klasy pozwoleń...................................................n............................ 802
8
Java 2. Techniki zaawansowane
Tworzenie własnych menedżerów bezpieczeństwa...................................................n. 808
Uwierzytelnianie użytkowników...................................................n............................ 815
Moduły JAAS...................................................n...................................................n.. 820
Podpis cyfrowy ...................................................n...................................................n.... 829
Skróty wiadomości ...................................................n............................................ 830
Podpisywanie wiadomości...................................................n.................................. 835
Uwierzytelnianie wiadomości ...................................................n.............................. 843
Certyfikaty X.509 ...................................................n.............................................. 845
Tworzenie certyfikatów...................................................n....................................... 847
Podpisywanie certyfikatów...................................................n.................................. 849
Podpisywanie kodu...................................................n................................................. 857
Podpisywanie plików JAR...................................................n.................................... 857
Certyfikaty twórców oprogramowania ...................................................n................... 861
Szyfrowanie ...................................................n...................................................n........ 863
Szyfrowanie symetryczne...................................................n.................................... 863
Strumienie szyfrujące ...................................................n........................................ 870
Szyfrowanie kluczem publicznym...................................................n......................... 871
Rozdział 10. Internacjonalizacja ...................................................n........................................................ 877
Lokalizatory ...................................................n...................................................n........ 878
Formaty liczby ...................................................n...................................................n..... 883
Waluty ...................................................n...................................................n.......... 889
Data i czas ...................................................n...................................................n......... 890
Porządek alfabetyczny...................................................n............................................. 897
Formatowanie komunikatów ...................................................n.................................... 905
Formatowanie z wariantami ...................................................n................................ 907
Pliki tekstowe i zbiory znaków ...................................................n.................................. 909
Internacjonalizacja a pliki źródłowe programów ...................................................n..... 909
Komplety zasobów ...................................................n................................................. 910
Lokalizacja zasobów ...................................................n.......................................... 911
Pliki właściwości ...................................................n............................................... 912
Klasy kompletów zasobów...................................................n.................................. 913
Kompletny przykład ...................................................n................................................ 915
Rozdział 11. Metody macierzyste...................................................n....................................................... 929
Wywołania funkcji języka C z programów w języku Java .................................................. 931
Wykorzystanie funkcji printf ...................................................n................................ 932
Numeryczne parametry metod i wartości zwracane...................................................n..... 937
Wykorzystanie funkcji printf do formatowania liczb ...................................................n 937
Łańcuchy znaków jako parametry ...................................................n............................. 938
Wywołanie funkcji sprintf przez metodę macierzystą................................................. 942
Dostęp do składowych obiektu ...................................................n................................ 944
Dostęp do pól instancji...................................................n...................................... 944
Dostęp do pól statycznych ...................................................n................................. 949
Sygnatury ...................................................n...................................................n........... 949
Wywoływanie metod języka Java...................................................n............................... 951
Wywoływanie metod obiektów...................................................n............................. 951
Wywoływanie metod statycznych ...................................................n......................... 952
Konstruktory...................................................n...................................................n.. 953
Alternatywne sposoby wywoływania metod ...................................................n........... 954
Tablice...................................................n...................................................n............... 958
Obsługa błędów ...................................................n...................................................n.. 963
Spis treści
9
Interfejs programowy wywołań języka Java...................................................n................. 967
Kompletny przykład: dostęp do rejestru systemu Windows............................................. 971
Rejestr systemu Windows ...................................................n.................................. 971
Interfejs dostępu do rejestru na platformie Java ...................................................n... 972
Implementacja dostępu do rejestru za pomocą metod macierzystych ......................... 973
Rozdział 12. Język XML ...................................................n...................................................n................... 987
Wprowadzenie do języka XML ...................................................n.................................. 988
Struktura dokumentu XML...................................................n.................................. 990
Parsowanie dokumentów XML ...................................................n................................. 993
Kontrola poprawności dokumentów XML ...................................................n................. 1003
Definicje typów dokumentów ...................................................n............................ 1005
XML Schema ...................................................n.................................................. 1012
Praktyczny przykład ...................................................n......................................... 1014
Wyszukiwanie infomacji i XPath...................................................n.............................. 1028
Przestrzenie nazw...................................................n................................................. 1033
Wykorzystanie parsera SAX ...................................................n................................... 1036
Tworzenie dokumentów XML...................................................n.................................. 1041
Przekształcenia XSL...................................................n.............................................. 1049
Rozdział 13. Adnotacje ...................................................n...................................................n....................1059
Umieszczanie metadanych w programach ...................................................n............... 1060
Przykład — adnotacje obsługi zdarzeń ...................................................n.................... 1061
Składnia adnotacji...................................................n................................................ 1066
Adnotacje standardowe...................................................n......................................... 1070
Adnotacje regularne ...................................................n........................................ 1070
Metaadnotacje...................................................n................................................ 1071
Narzędzie apt do przetwarzania adnotacji w kodzie źródłowym ...................................... 1074
Inżynieria kodu bajtowego ...................................................n..................................... 1080
Modyfikacja kodu bajtowego podczas ładowania...................................................n. 1089
Skorowidz...................................................n...................................................n.......................................1093
1
Wielowątkowość
W tym rozdziale:
n
Czym są wątki?
n
Przerywanie wątków.
n
Stany wątków.
n
Właściwości wątków.
n
Synchronizacja.
n
Kolejki blokujące.
n
Kolekcje.
n
Interfejsy Callable i Future.
n
Egzekutory.
n
Synchronizatory.
n
Wątki i Swing.
Czytelnik z pewnością wie, że wielozadaniowość oznacza możliwość pracy wielu programów
równocześnie. Dzięki wielozadaniowości możemy w czasie edycji dokumentu drukować inny
dokument bądź wysyłać faks. Oczywiście wtedy, gdy mamy do dyspozycji tylko maszynę
o pojedynczym procesorze, uzyskujemy jedynie wrażenie równoczesnego wykonywania
wielu programów, ponieważ system operacyjny przydziela czas procesora kolejnym zada-
niom. Takie zarządzanie przydziałem procesora jest tym bardziej możliwe, że wiele zadań ab-
sorbuje jego moc obliczeniową w znikomym stopniu.
Wielozadaniowość jest realizowana na dwa sposoby: z wywłaszczaniem i bez. W pierw-
szym przypadku system operacyjny samodzielnie podejmuje decyzję o przydziale proceso-
ra kolejnym zadaniom, natomiast w drugim wykonywanie zadania może zostać przerwane
tylko wtedy, jeśli zgodzi się ono oddać sterowanie. Starsze systemy operacyjne, takie jak
Windows 3.1 i Mac OS 9, pracują na zasadzie wielozadaniowości bez wywłaszczania.
Wten sam sposób działają też systemy operacyjne prostych urządzeń, na przykład telefonów
komórkowych. Natomiast system UNIX i jego pochodne, a także systemy Windows NT/XP
(oraz Windows 9x w przypadku aplikacji 32-bitowych) i OS X stosują wielozadaniowość
18
Java 2. Techniki zaawansowane
z wywłaszczaniem. Chociaż realizacja wielozadaniowości z wywłaszczaniem jest dużo
trudniejsza, to rozwiązanie takie jest bardziej efektywne, ponieważ w przypadku wieloza-
daniowości bez wywłaszczania niewłaściwie zachowująca się aplikacja może wstrzymać
wykonywanie pozostałych zadań w systemie.
Wielowątkowość rozszerza ideę wielozadaniowości w ten sposób, że każdy z programów może
wykonywać równocześnie wiele zadań. Zadania te nazywamy wątkami. Program, który wyko-
nuje więcej niż jeden wątek, nazywamy wielowątkowym.
Zasadnicza różnica pomiędzy zadaniami a wątkami polega na tym, że podczas gdy każde za-
danie dysponuje własnym oddzielnym zestawem danych (zmiennych), to wątki operują na
wspólnych danych. Utworzenie bądź usunięcie wątku wiąże się z dużo mniejszym nakładem
ze strony systemu operacyjnego niż w przypadku tych samych operacji dla zadania. Podobnie
komunikacja między zadaniami jest mniej efektywna niż pomiędzy wątkami. Dlatego też
zdecydowana większość współczesnych systemów operacyjnych obsługuje wielowątkowość.
Wielowątkowość okazuje się niesłychanie przydatna w praktyce. Przeglądarka internetowa,
wykorzystując wątki, pozwala jednocześnie załadować wiele obrazów na stronie. Klient poczty
elektronicznej umożliwia czytania poczty, w trakcie pobierając nowe wiadomości. Także Java
używa dodatkowego wątku, aby odzyskać w tle niewykorzystywaną przez program pamięć. Po-
gramy wyposażone w graficzny interfejs użytkownika stosują osobny wątek do uzyskiwania in-
formacji o zdarzeniach zachodzących w systemie okienkowym. W rozdziale tym pokażemy,
w jaki sposób wykorzystać zalety wielowątkowości w aplikacjach tworzonych w języku Java.
Pakiet JDK 5.0 udostępnia wiele nowych klas i interfejsów dostarczających zaawansowanej im-
plementacji mechanizmów wielowątkowych. W rozdziale tym omówimy nowe możliwości
JDK 5.0, a także klasyczne mechanizmy synchronizacji i pomożemy Ci dokonać właściwego
wyboru pomiędzy nimi.
Wielowątkowość nie jest prostym zagadnieniem. W rozdziale tym przedstawiamy wszyst-
kie narzędzia, które udostępnia język Java do programowania wątków. Wyjaśniamy przy
tym sposób ich wykorzystania, związane z tym ograniczenia i ilustrujemy całość prostymi,
ale typowymi przykładami. W bardziej złożonych przypadkach Czytelnik powinien jednak
skorzystać z bardziej specjalistycznej literatury, na przykład Concurrent Programming in
Java autorstwa Douga Lea (Addison-Wesley, 1999).
Czym są wątki?
Zapoznajmy się najpierw z przykładowym programem, który nie używa wątków i w kon-
sekwencji użytkownik nie może wykonać za jego pomocą wielu działań naraz. Później po-
każemy, jak łatwo usunąć te niedogodności, wprowadzając do programu wątki. Program
ten będzie animacją piłki odbijającej się od ramki okienka (patrz rysunek 1.1).
Wybranie przez użytkownika przycisku Start powoduje pojawienie się w lewym górnym
rogu okienka piłki, która rozpoczyna swój ruch. Metoda obsługi zdarzenia dla przycisku
Start wywołuje metodę CFF$CNN. Metoda ta zawiera pętlę, w której 1000 razy wykonywana
jest metoda OQXG powodująca niewielkie przesunięcie rysunku piłki, ewentualną zmianę
kierunku ruchu w przypadku odbicia od ramki i odrysowanie tła okna.
Rozdział 1. n Wielowątkowość
19
Rysunek 1.1.
Animacja piłki
odbijającej się
od ramki okienka
$CNNDCNNPGY$CNN
RCPGNCFF
DCNN
HQT
KPVKK56 25K
]
DCNNOQXG
RCPGNIGV$QWPFU
RCPGNRCKPV
RCPGNIGV)TCRJKEU
6JTGCFUNGGR
.#;
_
Metoda statyczna UNGGR klasy 6JTGCF powoduje zawieszenie wykonywania pętli na okre-
śloną liczbę milisekund.
Wywołanie metody 6JTGCFUNGGR nie tworzy nowego wątku — metoda UNGGR jest sta-
tyczną metodą klasy 6JTGCF, która powoduje wstrzymanie wykonywania aktywnego wąt-
ku na określony czas.
Metoda UNGGR może spowodować wystąpienie wyjątku +PVGTTWRVGF ZEGRVKQP. Wyjątek ten
oraz sposób jego obsługi omówimy dokładniej w dalszej części rozdziału. W obecnej wer-
sji programu jego wystąpienie spowoduje jedynie przerwanie animacji.
Animacja ruchu piłki w obecnej wersji programu absorbuje całkowicie jedyny wątek apli-
kacji w jej obecnej postaci. Jeśli użytkownik zechce, zanim pętla wykona się 1000 razy,
przerwać działanie programu, wybierając przycisk NQUG, to nie przyniesie to zamierzonego
efektu. Program nie może bowiem obsłużyć tego zdarzenia, dopóki nie zakończy animacji.
Przyglądając się pełnemu tekstowi programu zamieszczonemu poniżej, zauważymy wy-
wołanie
ECPXCURCKPV
ECPXCUIGV)TCRJKEU
wewnątrz metody OQXG klasy $CNN. Rozwiązanie to może wydawać się dziwne, ponie-
waż zwykle wywołujemy metodę TGRCKPV i pozwalamy AWT zająć się określeniem kon-
tekstu graficznego i odrysowaniem zawartości okna. Jednak jeśli postąpimy w ten
sposób także w tym programie, to odrysowanie nie będzie mogło się odbyć, ponieważ
metoda CFF$CNN zmonopolizowała przetwarzanie. W następnej wersji programu, która
będzie obliczać kolejne pozycji piłki w osobnym wątku, z powrotem będziemy mogli za-
stosować wywołanie metody TGRCKPV.
20
Java 2. Techniki zaawansowane
Zachowanie obecnej wersji programu jest dalekie od doskonałości. W większości przypad-
ków gdy program wykonuje czasochłonne operacje, musi istnieć możliwość ich przerwania.
Typowym przykładem są wszelkie programy czytające dane z sieci. Zawsze powinna istnieć
możliwość przerwania na przykład procesu ładowania dużego obrazka. Jeśli po obejrzeniu je-
go fragmentu użytkownik stwierdzi, że nie interesuje go całość, to wybranie przycisku Stop
lub Back powinno spowodować przerwanie procesu ładowania. W dalszej części rozdziału
pokażemy, w jaki sposób można zapewnić użytkownikowi pełną kontrolę nad działaniem
programu przez wykonywanie jego kluczowych fragmentów w osobnym wątku.
Listing 1.1 zawiera pełen tekst źródłowy obecnej wersji programu.
Listing 1.1. Bounce.java
KORQTVLCXCCYV
KORQTVLCXCCYVGXGPV
KORQTVLCXCCYVIGQO
KORQTVLCXCWVKN
KORQTVLCXCZUYKPI
#PKOCELCQFDKLCLæEGLUKúRKđMK
RWDNKEENCUU$QWPEG
]
RWDNKEUVCVKEXQKFOCKP
5VTKPI=?CTIU
]
,(TCOGHTCOGPGY$QWPEG(TCOG
HTCOGUGV GHCWNV NQUG1RGTCVKQP
,(TCOG :+6A10A .15
HTCOGUGV8KUKDNG
VTWG
_
_
2KđMCRQTWUCLæECUKúKQFDKLCLæECQFMTCYúFK
MQORQPGPVW
ENCUU$CNN
]
2TGUWYCRKđMúFQPCUVúRPGLRQ[ELKOKGPKCLæEMKGTWPGMTWEJW
LGħNKPCVTCHKPCMTCYúFļ
RWDNKEXQKFOQXG
4GEVCPING DQWPFU
]
Z
FZ
[
F[
KH
ZDQWPFUIGV/KP:
]
ZDQWPFUIGV/KP:
FZFZ
_
KH
Z
:5+ DQWPFUIGV/CZ:
]
ZDQWPFUIGV/CZ:
:5+
FZFZ
_
Rozdział 1. n Wielowątkowość
21
KH
[DQWPFUIGV/KP;
]
[DQWPFUIGV/KP;
F[F[
_
KH
[
;5+ DQWPFUIGV/CZ;
]
[DQWPFUIGV/CZ;
;5+
F[F[
_
_
6YQT[MUVCđVRKđMKFNCDKGľæEGLRQ[ELK
RWDNKE NNKRUG IGV5JCRG
]
TGVWTPPGY NNKRUG QWDNG
Z[:5+ ;5+
_
RTKXCVGUVCVKEHKPCNKPV:5+
RTKXCVGUVCVKEHKPCNKPV;5+
RTKXCVGFQWDNGZ
RTKXCVGFQWDNG[
RTKXCVGFQWDNGFZ
RTKXCVGFQWDNGF[
_
2CPGNT[UWLæE[RKđMK
ENCUU$CNN2CPGNGZVGPFU,2CPGN
]
QFCLGRKđMúFQRCPGNW
RCTCODFQFCYCPCRKđMC
RWDNKEXQKFCFF
$CNND
]
DCNNUCFF
D
_
RWDNKEXQKFRCKPV QORQPGPV
)TCRJKEUI
]
UWRGTRCKPV QORQPGPV
I
)TCRJKEU I
)TCRJKEU I
HQT
$CNNDDCNNU
]
IHKNN
DIGV5JCRG
_
_
RTKXCVG#TTC[.KUV$CNN DCNNUPGY#TTC[.KUV$CNN
_
4COMCCYKGTCLæECVđQKRT[EKUMK
22
Java 2. Techniki zaawansowane
ENCUU$QWPEG(TCOGGZVGPFU,(TCOG
]
-QPUVTWWLGTCOMúCYKGTCLæEæRCPGNYMVÎTGLCPKOQYCPCDúFKGRKđMC
KRQMCCPGRT[EKUMK5VCTVK NQUG
RWDNKE$QWPEG(TCOG
]
UGV5KG
(#7.6A9+ 6* (#7.6A* +)*6
UGV6KVNG
$QWPEG
RCPGNPGY$CNN2CPGN
CFF
RCPGN$QTFGT.C[QWV 06 4
,2CPGNDWVVQP2CPGNPGY,2CPGN
CFF$WVVQP
DWVVQP2CPGN5VCTV
PGY#EVKQP.KUVGPGT
]
RWDNKEXQKFCEVKQP2GTHQTOGF
#EVKQP XGPVGXGPV
]
CFF$CNN
_
_
CFF$WVVQP
DWVVQP2CPGN NQUG
PGY#EVKQP.KUVGPGT
]
RWDNKEXQKFCEVKQP2GTHQTOGF
#EVKQP XGPVGXGPV
]
5[UVGOGZKV
_
_
CFF
DWVVQP2CPGN$QTFGT.C[QWV5176*
_
QFCLGRT[EKUMFQMQPVGPGTC
RCTCOEMQPVGPGT
RCTCOVKVNGPCYCRT[EKUMW
RCTCONKUVGPGTQDKGMVPCUđWEJWLæE[RT[EKUMW
RWDNKEXQKFCFF$WVVQP
QPVCKPGTE5VTKPIVKVNG#EVKQP.KUVGPGTNKUVGPGT
]
,$WVVQPDWVVQPPGY,$WVVQP
VKVNG
ECFF
DWVVQP
DWVVQPCFF#EVKQP.KUVGPGT
NKUVGPGT
_
QFCLGRKđMúFQRCPGNW
4[UWLGRKđMúKCPKOWLGLæTC[
RWDNKEXQKFCFF$CNN
]
VT[
Rozdział 1. n Wielowątkowość
23
]
$CNNDCNNPGY$CNN
RCPGNCFF
DCNN
HQT
KPVKK56 25K
]
DCNNOQXG
RCPGNIGV$QWPFU
RCPGNRCKPV
RCPGNIGV)TCRJKEU
6JTGCFUNGGR
.#;
_
_
ECVEJ
+PVGTTWRVGF ZEGRVKQPG
]
_
_
RTKXCVG$CNN2CPGNRCPGN
RWDNKEUVCVKEHKPCNKPV (#7.6A9+ 6*
RWDNKEUVCVKEHKPCNKPV (#7.6A* +)*6
RWDNKEUVCVKEHKPCNKPV56 25
RWDNKEUVCVKEHKPCNKPV .#;
_
LCXCNCPI6JTGCF
n
UVCVKEXQKFUNGGR
NQPIOKNNKU zawiesza wykonanie wątku na określoną liczbę
milisekund.
Parametry: OKNNKU
liczba milisekund zawieszenia wątku
Zastosowanie wątków
Program animacji piłki może lepiej odpowiadać na akcje użytkownika, jeśli kod odpowie-
dzialny za animację umieścimy w osobnym wątku. Rozwiązanie takie pozwoli nam nawet
animować wiele piłek. Animacja każdej z nich odbywać będzie się w osobnym wątku.
Równolegle z wątkami animacji działać będzie również wątek obsługi zdarzeń AWT zaj-
mujący się obsługą zdarzeń związanych z interfejsem użytkownika. Ponieważ wszystkie
wątki mają równą szansę wykonania, to główny wątek programu może teraz uzyskać info-
mację o wybraniu przez użytkownika przycisku Close i odpowiednio zareagować na to zda-
rzenie. A oto prosty sposób na uruchomienie zadania w osobnym wątku:
1.
Kod realizujący zadanie umieszczamy wewnątrz metody TWP klasy implementującej
interfejs 4WPPCDNG. Interfejs ten jest bardzo prosty i posiada tylko jedną metodę:
RWDNKEKPVGTHCEG4WPPCDNG
]
XQKFTWP
_
Klasę implementującą ten interfejs tworzymy w następujący sposób:
24
Java 2. Techniki zaawansowane
ENCUU/[4WPPCDNGKORNGOGPVU4WPPCDNG
]
RWDNKEXQKFTWP
]
MQFCFCPKC
_
_
2.
Następnie tworzymy obiekt naszej klasy:
4WPPCDNGTPGY/[4WPPCDNG
3.
Tworzymy obiekt 6JTGCF na podstawie obiektu 4WPPCDNG:
6JTGCFVPGY6JTGCF
T
4.
Uruchamiamy wątek:
VUVCTV
Aby kod animacji piłki wykonywany był we własnym wątku, wystarczy umieścić go we-
wnątrz metody TWP klasy $CNN4WPPCDNG:
ENCUU$CNN4WPPCDNGKORNGOGPVU4WPPCDNG
]
RWDNKEXQKFTWP
]
VT[
]
HQT
KPVKK56 25K
]
DCNNOQXG
EQORQPGPVIGV$QWPFU
EQORQPGPVTGRCKPV
6JTGCFUNGGR
.#;
_
_
ECVEJ
+PVGTTWRVGF ZEGRVKQPG
]
_
_
_
Powyższy fragment kodu zawiera także obsługę wyjątku +PVGTTWRVGF ZEGRVKQP, którego
wystąpienie może spowodować metoda UNGGR. Wyjątek ten omówimy w następnym punk-
cie. Typowo, aby zakończyć wykonywanie wątku, przerywa się jego działanie. Zgodnie
z tą zasadą wystąpienie wyjątku +PVGTTWRVGF ZEGRVKQP spowoduje zakończenie wykony-
wania naszej metody TWP.
Za każdym razem, gdy użytkownik wybierze przycisk Start, metoda CFF$CNN uruchamia
nowy wątek (patrz rysunek 1.2):
$CNNDPGY$CNN
RCPGNCFF
D
4WPPCDNGTPGY$CNN4WPPCDNG
DRCPGN
6JTGCFVPGY6JTGCF
T
VUVCTV
Rozdział 1. n Wielowątkowość
25
Rysunek 1.2.
Animacja
wielowątkowa
I to wszystko! W ten sposób dowiedziałeś się, w jaki sposób uruchamiać równolegle dzia-
łające wątki. Pozostała część tego rozdziału poświęcona jest interakcjom pomiędzy wątkami.
Wątek możemy również zdefiniować, tworząc klasę pochodną klasy 6JTGCF:
ENCUU/[6JTGCFGZVGPFU6JTGCF
]
RWDNKEXQKFTWP
]
MQFCFCPKC
_
_
Następnie tworzymy obiekt tej klasy pochodnej i wywołujemy jego metodę UVCTV. Roz-
wiązanie takie nie jest jednak zalecane. Należy dążyć do oddzielenia wykonywanego
zadania od mechanizmu jego wykonywania. W sytuacji, gdy musimy wykonać dużą licz-
bę zadań, tworzenie wątku dla każdego z nich jest zbyt kosztowne i lepiej jest wykorzy-
stać pulę wątków (patrz strona 83.).
Nie należy wywoływać bezpośrednio metody TWP — zostanie ona wywołana przez me-
todę UVCTV, w momencie gdy wątek jest gotowy do rozpoczęcia działania. Bezpośred-
nie wywołanie metody TWP spowoduje jej wykonanie w bieżącym wątku zamiast utwo-
rzenia nowego.
Listing 1.2 zawiera kompletny kod animacji wielowątkowej.
Listing 1.2. BounceThread.java
KORQTVLCXCCYV
KORQTVLCXCCYVGXGPV
KORQTVLCXCCYVIGQO
KORQTVLCXCWVKN
KORQTVLCXCZUYKPI
26
Java 2. Techniki zaawansowane
#PKOCELCQFDKLCLæEGLUKúRKđMK
RWDNKEENCUU$QWPEG6JTGCF
]
RWDNKEUVCVKEXQKFOCKP
5VTKPI=?CTIU
]
,(TCOGHTCOGPGY$QWPEG(TCOG
HTCOGUGV GHCWNV NQUG1RGTCVKQP
,(TCOG :+6A10A .15
HTCOGUGV8KUKDNG
VTWG
_
_
#PKOCELCQFDKLCLæEGLUKúRKđMK
ENCUU$CNN4WPPCDNGKORNGOGPVU4WPPCDNG
]
-QPUVTWMVQT
C$CNNRKđMC
C2CPGNMQORQPGPVYMVÎT[ODúFKGCPKOQYCPC
RWDNKE$CNN4WPPCDNG
$CNNC$CNN QORQPGPVC QORQPGPV
]
DCNNC$CNN
EQORQPGPVC QORQPGPV
_
RWDNKEXQKFTWP
]
VT[
]
HQT
KPVKK56 25K
]
DCNNOQXG
EQORQPGPVIGV$QWPFU
EQORQPGPVTGRCKPV
6JTGCFUNGGR
.#;
_
_
ECVEJ
+PVGTTWRVGF ZEGRVKQPG
]
_
_
RTKXCVG$CNNDCNN
RTKXCVG QORQPGPVEQORQPGPV
RWDNKEUVCVKEHKPCNKPV56 25
RWDNKEUVCVKEHKPCNKPV .#;
_
2KđMCRQTWUCLæECUKúKQFDKLCLæECQFMTCYúFK
MQORQPGPVW
ENCUU$CNN
]
Rozdział 1. n Wielowątkowość
27
2TGUWYCRKđMúFQPCUVúRPGLRQ[ELKOKGPKCLæEMKGTWPGMTWEJW
LGħNKPCVTCHKPCMTCYúFļ
RWDNKEXQKFOQXG
4GEVCPING DQWPFU
]
Z
FZ
[
F[
KH
ZDQWPFUIGV/KP:
]
ZDQWPFUIGV/KP:
FZFZ
_
KH
Z
:5+ DQWPFUIGV/CZ:
]
ZDQWPFUIGV/CZ:
:5+
FZFZ
_
KH
[DQWPFUIGV/KP;
]
[DQWPFUIGV/KP;
F[F[
_
KH
[
;5+ DQWPFUIGV/CZ;
]
[DQWPFUIGV/CZ;
;5+
F[F[
_
_
6YQT[MUVCđVRKđMKFNCDKGľæEGLRQ[ELK
RWDNKE NNKRUG IGV5JCRG
]
TGVWTPPGY NNKRUG QWDNG
Z[:5+ ;5+
_
RTKXCVGUVCVKEHKPCNKPV:5+
RTKXCVGUVCVKEHKPCNKPV;5+
RTKXCVGFQWDNGZ
RTKXCVGFQWDNG[
RTKXCVGFQWDNGFZ
RTKXCVGFQWDNGF[
_
2CPGNT[UWLæE[RKđMú
ENCUU$CNN2CPGNGZVGPFU,2CPGN
]
QFCLGRKđMúFQRCPGNW
RCTCODFQFCYCPCRKđMC
RWDNKEXQKFCFF
$CNND
]
DCNNUCFF
D
28
Java 2. Techniki zaawansowane
_
RWDNKEXQKFRCKPV QORQPGPV
)TCRJKEUI
]
UWRGTRCKPV QORQPGPV
I
)TCRJKEU I
)TCRJKEU I
HQT
$CNNDDCNNU
]
IHKNN
DIGV5JCRG
_
_
RTKXCVG#TTC[.KUV$CNN DCNNUPGY#TTC[.KUV$CNN
_
4COMCCYKGTCLæECRCPGNKRT[EKUMK
ENCUU$QWPEG(TCOGGZVGPFU,(TCOG
]
-QPUVTWWLGTCOMúRCPGNGOYMVÎTGLCPKOQYCPCDúFKGRKđMC
KWOKGUEQPGRT[EKUMK5VCTVK NQUG
RWDNKE$QWPEG(TCOG
]
UGV5KG
(#7.6A9+ 6* (#7.6A* +)*6
UGV6KVNG
$QWPEG6JTGCF
RCPGNPGY$CNN2CPGN
CFF
RCPGN$QTFGT.C[QWV 06 4
,2CPGNDWVVQP2CPGNPGY,2CPGN
CFF$WVVQP
DWVVQP2CPGN5VCTV
PGY#EVKQP.KUVGPGT
]
RWDNKEXQKFCEVKQP2GTHQTOGF
#EVKQP XGPVGXGPV
]
CFF$CNN
_
_
CFF$WVVQP
DWVVQP2CPGN NQUG
PGY#EVKQP.KUVGPGT
]
RWDNKEXQKFCEVKQP2GTHQTOGF
#EVKQP XGPVGXGPV
]
5[UVGOGZKV
_
_
CFF
DWVVQP2CPGN$QTFGT.C[QWV5176*
_
QFCLGRT[EKUMFQMQPVGPGTC
RCTCOEMQPVGPGT
RCTCOVKVNGPCYCRT[EKUMW
RCTCONKUVGPGTQDKGMVPCUđWEJWLæE[RT[EKUMW
Rozdział 1. n Wielowątkowość
29
RWDNKEXQKFCFF$WVVQP
QPVCKPGTE5VTKPIVKVNG#EVKQP.KUVGPGTNKUVGPGT
]
,$WVVQPDWVVQPPGY,$WVVQP
VKVNG
ECFF
DWVVQP
DWVVQPCFF#EVKQP.KUVGPGT
NKUVGPGT
_
6YQT[RKđMúKWTWEJCOKCPQY[YæVGMLGLCPKOCELK
RWDNKEXQKFCFF$CNN
]
$CNNDPGY$CNN
RCPGNCFF
D
4WPPCDNGTPGY$CNN4WPPCDNG
DRCPGN
6JTGCFVPGY6JTGCF
T
VUVCTV
_
RTKXCVG$CNN2CPGNRCPGN
RWDNKEUVCVKEHKPCNKPV (#7.6A9+ 6*
RWDNKEUVCVKEHKPCNKPV (#7.6A* +)*6
RWDNKEUVCVKEHKPCNKPV56 25
RWDNKEUVCVKEHKPCNKPV .#;
_
LCXCNCPI6JTGCF
n
n
n
6JTGCF
4WPPCDNGVCTIGV tworzy nowy wątek, który wykonywać będzie metodę
run obiektu VCTIGV.
XQKFUVCTV
uruchamia ten wątek i powoduje wywołanie metody TWP. Metoda
UVCTV oddaje natychmiast sterowanie do metody, która ją wywołała, a nowy wątek
wykonywany jest równolegle.
XQKFTWP
wywołuje metodę TWP odpowiedniego obiektu implementującego
interfejs 4WPPCDNG.
LCXCNCPI4WPPCDNG
n
XQKFTWP
— tę metodę należy zastąpić własną wersją zawierającą kod, który ma
być wykonywany w nowym wątku.
Przerywanie wątków
Wykonanie wątku kończy się w momencie, gdy metoda TWP zwraca sterowanie. (W pierw-
szej wersji języka Java istniała także metoda UVQR, za pomocą której jeden wątek mógł za-
kończyć wykonywanie innego. Obecnie metoda ta nie jest stosowana, a przyczyny tego
omówimy w dalszej części rozdziału).
30
Java 2. Techniki zaawansowane
Obecnie nie istnieje więc sposób, aby wymusić zakończenie wątku. Można jednak zażądać
zakończenia wątku za pomocą metody KPVGTTWRV.
Wywołanie metody KPVGTTWRV powoduje nadanie wątkowi statusu przerwania. Status ten
jest reprezentowany za pomocą znacznika logicznego. Wartość tego znacznika powinna
być okresowo sprawdzana przez wątek.
Aby sprawdzić status przerwania wątku, należy najpierw wywołać metodę statyczną 6JTG
CFEWTTGPV6JTGCF, aby uzyskać bieżący wątek, a następnie wywołać metodę KU+PVGTTWRVGF
sprawdzającą jego status:
YJKNG
6JTGCFEWTTGPV6JTGCF
KU+PVGTTWRVGF
UæFKCđCPKCFQY[MQPCPKC
]
Y[MQPCLVGFKCđCPKC
_
Jednak wątek, którego wykonywanie zostało zablokowane, nie może sprawdzić własnego
statusu przerwania. I właśnie w takim przypadku pomocny jest wyjątek +PVGTTWRVGF ZEGR
VKQP. Jeśli metoda KPVGTTWRV zostanie wywołana dla wątku, którego wykonanie jest zablo-
kowane, to blokująca go metoda UNGGR lub YCKV zostanie przerwana i pojawi się wyjątek
+PVGTTWRVGF ZEGRVKQP.
Środowisko języka Java nie wymaga wcale, aby wątek przerwany w taki sposób zakończył
swoje wykonywanie. Przerwanie wątku sygnalizuje jedynie pojawienie się pewnego żąda-
nia. Przerwany wątek sam decyduje, w jaki sposób zareagować na takie żądanie. Wykona-
nie niektórych wątków w programie może być na tyle ważne, że po prostu zignorują one
wyjątek i kontynuować będą swoje działanie. Najczęściej jednak wątek zinterpretuje wyją-
tek jako żądanie zakończenia wykonywania. Metoda TWP takiego wątku wygląda wtedy na-
stępująco:
RWDNKEXQKFTWP
]
VT[
]
YJKNG
6JTGCFEWTTGPV6JTGCF
KU+PVGTTWRVGF
UæFKCđCPKCFQY[MQPCPKC
]
Y[MQPCLVGFKCđCPKC
_
_
ECVEJ
+PVGTTWRVGF ZEGRVKQPGZEGRVKQP
]
YæVGMRTGTYCP[YVTCMEKGOGVQF[UNGGRNWDYCKV
_
HKPCNN[
]
YæVGMœURTæVCRQUQDKGŒLGħNKVQMQPKGEPG
_
CMQēEGPKGY[MQP[YCPKCOGVQF[TWPKV[OUCO[OYæVMW
_
Sprawdzenie statusu przerwania wątku za pomocą metody KU+PVGTTWRVGF nie jest konieczne,
gdy metoda UNGGR wywoływana jest po każdej iteracji przetwarzania. Gdy wątek posiada
status przerwania, to wywołanie metody UNGGR spowoduje wystąpienie wyjątku +PVGTTWR
Rozdział 1. n Wielowątkowość
31
VGF ZEGRVKQP. Dlatego też, gdy metoda UNGGR wywoływana jest w pętli, to nie musimy
sprawdzać statusu przerwania wątku. Wystarczy jedynie zająć się obsługą wyjątku +PVGT
TWRVGF ZEGRVKQP. Metoda TWP posiada wtedy następującą postać:
RWDNKEXQKFTWP
]
VT[
]
YJKNG
UæFKCđCPKCFQY[MQPCPKC
]
Y[MQPCLVGFKCđCPKC
6JTGCFUNGGR
FGNC[
_
_
ECVEJ
+PVGTTWRVGF ZEGRVKQPGZEGRVKQP
]
YæVGMRTGTYCP[YVTCMEKGOGVQF[UNGGRNWDYCKV
_
HKPCNN[
]
YæVGMœURTæVCRQUQDKGŒLGħNKVQMQPKGEPG
_
CMQēEGPKGY[MQP[YCPKCOGVQF[TWPKV[OUCO[OYæVMW
_
Wygenerowanie wyjątku +PVGTTWRVGF ZEGRVKQP przez metodę UNGGR kasuje status
przerwania wątku.
Istnieją dwie podobne metody, KPVGTTWRVGF oraz KU+PVGTTWRVGF. Metoda KPVGTTWRVGF
j
Pobierz darmowy fragment (pdf)