Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00670 009214 10483495 na godz. na dobę w sumie
Java 2. Techniki zaawansowane. Wydanie II - książka
Java 2. Techniki zaawansowane. Wydanie II - książka
Autor: , Liczba stron: 1144
Wydawca: Helion Język publikacji: polski
ISBN: 83-7361-842-2 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> programowanie >> java - programowanie
Porównaj ceny (książka, ebook, audiobook).

Kompletne i niezastąpione źródło wiedzy dla doświadczonych programistów

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.

Jeśli zamierzasz wykorzystać Javę w złożonym projekcie informatycznym, ta książka będzie dla Ciebie niezastąpiona.

Znajdź podobne książki Ostatnio czytane w tej kategorii

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)

Gdzie kupić całą publikację:

Java 2. Techniki zaawansowane. Wydanie II
Autor:
,

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: