Original edition copyright 2012 by The McGraw-Hill Companies, Inc. All rights reserved.



Podobne dokumenty
Spis treści. O autorze (11) O redaktorze technicznym (11) Wstęp (13) Rozdział 1. Podstawy Javy (19)

Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli.

Dziedziczenie : Dziedziczenie to nic innego jak definiowanie nowych klas w oparciu o już istniejące.

Bazy danych. Andrzej Łachwa, UJ, /15

WYMAGANIA EDUKACYJNE I KRYTERIA OCENIANIA Z PRZEDMIOTU PROGRAMOWANIE APLIKACJI INTERNETOWYCH

Spis treści 1. Wstęp 2. Projektowanie systemów informatycznych

Systemy mikroprocesorowe - projekt

Uniwersytet Rzeszowski

Budowa systemów komputerowych

Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 1

Polish edition copyright 2014 by Helion S.A. All rights reserved.

0.1 Hierarchia klas Diagram Krótkie wyjaśnienie

Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli.

Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli.

Instrukcja obsługi Norton Commander (NC) wersja 4.0. Autor: mgr inż. Tomasz Staniszewski

O autorze... 9 Wprowadzenie... 11

Współbieżność w środowisku Java

Spring MVC Andrzej Klusiewicz 1/18

Współbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1

Microsoft Management Console

Architektura komputerów

Programowanie obiektowe

Kompozycja i dziedziczenie klas

Instalacja. Zawartość. Wyszukiwarka. Instalacja Konfiguracja Uruchomienie i praca z raportem Metody wyszukiwania...

VLAN Ethernet. być konfigurowane w dowolnym systemie operacyjnym do ćwiczenia nr 6. Od ćwiczenia 7 należy pracować ć w systemie Linux.

Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli.

PERSON Kraków

Wielowątkowość. Programowanie w środowisku rozproszonym. Wykład 1.

System Informatyczny CELAB. Przygotowanie programu do pracy - Ewidencja Czasu Pracy

Instrukcja procesu aktywacji oraz obsługi systemu Banku Internetowego dla BS Mikołajki

1 Wątki 1. 2 Tworzenie wątków 1. 3 Synchronizacja 3. 4 Dodatki 3. 5 Algorytmy sortowania 4

InsERT GT Własne COM 1.0

PRAWA ZACHOWANIA. Podstawowe terminy. Cia a tworz ce uk ad mechaniczny oddzia ywuj mi dzy sob i z cia ami nie nale cymi do uk adu za pomoc

Rozliczenia z NFZ. Ogólne założenia. Spis treści

WYKŁAD 8. Postacie obrazów na różnych etapach procesu przetwarzania

Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych ul. Koszykowa 75, Warszawa

API transakcyjne BitMarket.pl

Arkusz zawiera informacje prawnie chronione do momentu rozpocz cia egzaminu.

Elementy i funkcjonalno

System kontroli wersji SVN

Harmonogramowanie projektów Zarządzanie czasem

2.Prawo zachowania masy

PODRĘCZNIK UŻYTKOWNIKA

Rozdział 6. Pakowanie plecaka. 6.1 Postawienie problemu

Aplikacje w Javie- wykład 11 Wątki-podstawy

Oprogramowanie klawiatury matrycowej i alfanumerycznego wyświetlacza LCD

elektroniczna Platforma Usług Administracji Publicznej

Wykład 2. Budowa komputera. W teorii i w praktyce

Kurs programowania. Wykład 8. Wojciech Macyna

Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli.

POMOC PSYCHOLOGICZNO-PEDAGOGICZNA Z OPERONEM. Vademecum doradztwa edukacyjno-zawodowego. Akademia

Instrukcja programu PControl Powiadowmienia.

KATEDRA INFORMATYKI STOSOWANEJ PŁ ANALIZA I PROJEKTOWANIE SYSTEMÓW INFORMATYCZNYCH

Poniżej instrukcja użytkowania platformy

PROE wykład 7 kontenery tablicowe, listy. dr inż. Jacek Naruniec

Konfiguracja historii plików

Akademickie Centrum Informatyki PS. Wydział Informatyki PS

emszmal 3: Automatyczne księgowanie przelewów w sklepie internetowym Magento (plugin dostępny w wersji ecommerce)

Sieci komputerowe. Definicja. Elementy

Rozwiązywanie nazw w sieci. Identyfikowanie komputerów w sieci

Warszawa, r.

REGULAMIN. przeprowadzania naboru nowych pracowników do korpusu służby cywilnej w Kuratorium Oświaty w Szczecinie.

Wątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run().

Zad.1 Pokazać pierwszeństwo trybu odmów przed zezwalaj.

System do kontroli i analizy wydawanych posiłków

Środowisko programisty

Charakterystyka systemów plików

INSTRUKCJA OBSŁUGI URZĄDZENIA: HC8201

Chmura obliczeniowa. do przechowywania plików online. Anna Walkowiak CEN Koszalin

Jak usprawnić procesy controllingowe w Firmie? Jak nadać im szerszy kontekst? Nowe zastosowania naszych rozwiązań na przykładach.

Ostatnia cena sprzeda y klienta 1.0 dodatek do Symfonia Faktura dla 1 firmy

enova Workflow Obieg faktury kosztowej

Polityka prywatności strony internetowej wcrims.pl

Zintegrowane Systemy Zarządzania Biblioteką SOWA1 i SOWA2 SKONTRUM

I. Zakładanie nowego konta użytkownika.

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Opis obsługi systemu Ognivo2 w aplikacji Komornik SQL-VAT

Informacje o omawianym programie. Założenia programu omawianego w przykładzie

Komunikacja w sieci Industrial Ethernet z wykorzystaniem Protokołu S7 oraz funkcji PUT/GET

A X E S S INSTRUKCJA UŻYTKOWNIKA

Język Java wątki (streszczenie)

1. Podstawy budowania wyra e regularnych (Regex)

Program Google AdSense w Smaker.pl

Instrukcja obsługi zamka. bibi-z50. (zamek autonomiczny z czytnikiem identyfikatora Mifare)

Instrukcja dotycząca generowania klucza dostępowego do Sidoma v8

GEO-SYSTEM Sp. z o.o. GEO-RCiWN Rejestr Cen i Wartości Nieruchomości Podręcznik dla uŝytkowników modułu wyszukiwania danych Warszawa 2007

Oprogramowanie FonTel służy do prezentacji nagranych rozmów oraz zarządzania rejestratorami ( zapoznaj się z rodziną rejestratorów FonTel ).

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Aplikacja wielow tkowa prosty komunikator

INSTRUKCJA DO PROGRAMU LICZARKA 2000 v 2.56

VinCent Office. Moduł Drukarki Fiskalnej

Administrator Konta - osoba wskazana Usługodawcy przez Usługobiorcę, uprawniona w imieniu Usługobiorcy do korzystania z Panelu Monitorującego.

Zobacz to na własne oczy. Przyszłość już tu jest dzięki rozwiązaniu Cisco TelePresence.

Wątek - definicja. Wykorzystanie kilku rdzeni procesora jednocześnie Zrównoleglenie obliczeń Jednoczesna obsługa ekranu i procesu obliczeniowego

Komputer i urządzenia z nim współpracujące

Arkusz zawiera informacje prawnie chronione do momentu rozpocz cia egzaminu.

Edycja geometrii w Solid Edge ST

REJESTRATOR RES800 INSTRUKCJA OBSŁUGI

Type ETO2 Controller for ice and snow melting

Transkrypt:

Tytuł oryginału: Java, A Beginner's Guide, 5th Edition Tłumaczenie: Jaromir Senczyk ISBN: 978-83-246-3919-9 Original edition copyright 2012 by The McGraw-Hill Companies, Inc. All rights reserved. Polish edition copyright 2012 by HELION SA All rights reserved. All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from the Publisher. Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną, fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji. Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli. Autor oraz Wydawnictwo HELION dołożyli wszelkich starań, by zawarte w tej książce informacje były kompletne i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich. Autor oraz Wydawnictwo HELION nie ponoszą również żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce. Wydawnictwo HELION ul. Kościuszki 1c, 44-100 GLIWICE tel. 32 231 22 19, 32 230 98 63 e-mail: helion@helion.pl WWW: http://helion.pl (księgarnia internetowa, katalog książek) Pliki z przykładami omawianymi w książce można znaleźć pod adresem: ftp://ftp.helion.pl/przyklady/javpp5.zip Drogi Czytelniku! Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres http://helion.pl/user/opinie/javpp5 Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję. Printed in Poland. Kup książkę Poleć książkę Oceń książkę Księgarnia internetowa Lubię to!» Nasza społeczność

Spis tre ci O autorze... 11 O redaktorze technicznym...11 Wst p... 13 Rozdzia 1. Podstawy Javy... 19 Pochodzenie Javy...20 Java a j zyki C i C++...21 Java a C#...22 Java a Internet...22 Aplety Java...22 Bezpiecze stwo...23 Przeno no...23 Magiczny kod bajtowy...24 Terminologia Javy...25 Programowanie obiektowe...26 Hermetyzacja...27 Polimorfizm...28 Dziedziczenie...28 Java Development Kit...29 Pierwszy prosty program...30 Wprowadzenie tekstu programu...30 Kompilowanie programu...31 Pierwszy program wiersz po wierszu...31 Obs uga b dów sk adni...34 Drugi prosty program...35 Inne typy danych...37 Przyk ad 1.1. Zamiana galonów na litry...38 Dwie instrukcje steruj ce...39 Instrukcja if...40 P tla for...41 Bloki kodu...43 rednik i pozycja kodu w wierszu...44 Wci cia...45 Przyk ad 1.2. Ulepszony konwerter galonów na litry...45 S owa kluczowe j zyka Java...46 Identyfikatory...47 Biblioteki klas...48 Test sprawdzaj cy...48

4 Java. Przewodnik dla pocz tkuj cych Rozdzia 2. Typy danych i operatory... 49 Dlaczego typy danych s tak wa ne...50 Typy podstawowe...50 Typy ca kowite...51 Typy zmiennoprzecinkowe...52 Znaki...53 Typ logiczny...54 Przyk ad 2.1. Jak daleko uderzy piorun?...55 Litera y...56 Litera y szesnastkowe, ósemkowe i binarne...57 Specjalne sekwencje znaków...57 Litera y a cuchowe...58 Zmienne...59 Inicjalizacja zmiennej...59 Dynamiczna inicjalizacja...60 Zasi g deklaracji i czas istnienia zmiennych...60 Operatory...63 Operatory arytmetyczne...63 Inkrementacja i dekrementacja...65 Operatory relacyjne i logiczne...66 Warunkowe operatory logiczne...67 Operator przypisania...69 Skrótowe operatory przypisania...69 Konwersje typów w instrukcjach przypisania...71 Rzutowanie typów niezgodnych...72 Priorytet operatorów...74 Przyk ad 2.2. Tabela prawdy dla operatorów logicznych...74 Wyra enia...75 Konwersja typów w wyra eniach...76 Odst py i nawiasy...77 Test sprawdzaj cy...78 Rozdzia 3. Instrukcje steruj ce...79 Wprowadzanie znaków z klawiatury...79 Instrukcja if...81 Zagnie d anie instrukcji if...82 Drabinka if-else-if...83 Instrukcja switch...84 Zagnie d anie instrukcji switch...88 Przyk ad 3.1. Rozpoczynamy budow systemu pomocy...88 P tla for...90 Wariacje na temat p tli for...92 Brakuj ce elementy...93 P tla niesko czona...94 P tle bez cia a...94 Deklaracja zmiennych steruj cych wewn trz p tli...95 Rozszerzona p tla for...96 P tla while...96 P tla do-while...97 Przyk ad 3.2. Ulepszamy system pomocy...99 Przerywanie p tli instrukcj break...102 Zastosowanie break jako formy goto...104 Zastosowanie instrukcji continue...108 Przyk ad 3.3. Ko cowa wersja systemu pomocy...109

Spis tre ci 5 P tle zagnie d one...112 Test sprawdzaj cy...113 Rozdzia 4. Wprowadzenie do klas, obiektów i metod...115 Podstawy klas...116 Ogólna posta klasy...116 Definiowanie klasy...117 Jak powstaj obiekty...120 Referencje obiektów i operacje przypisania...120 Metody...121 Dodajemy metod do klasy Vehicle...122 Powrót z metody...124 Zwracanie warto ci...125 Stosowanie parametrów...127 Dodajemy sparametryzowan metod do klasy Vehicle...128 Przyk ad 4.1. System pomocy jako klasa...130 Konstruktory...135 Konstruktory z parametrami...136 Dodajemy konstruktor do klasy Vehicle...137 Operator new...138 Odzyskiwanie nieu ytków i metoda finalize()...139 Metoda finalize()...139 Przyk ad 4.2. Ilustracja dzia ania odzyskiwania nieu ytków i metody finalize()...140 S owo kluczowe this...142 Test sprawdzaj cy...144 Rozdzia 5. Wi cej typów danych i operatorów...145 Tablice...145 Tablice jednowymiarowe...146 Przyk ad 5.1. Sortowanie tablicy...149 Tablice wielowymiarowe...151 Tablice dwuwymiarowe...151 Tablice nieregularne...152 Tablice o trzech i wi cej wymiarach...153 Inicjalizacja tablic wielowymiarowych...153 Alternatywna sk adnia deklaracji tablic...155 Przypisywanie referencji tablic...155 Wykorzystanie sk adowej length...156 Przyk ad 5.2. Klasa Queue...158 Styl for-each p tli for...162 Iteracje w tablicach wielowymiarowych...165 Zastosowania rozszerzonej p tli for...166 a cuchy znaków...167 Tworzenie a cuchów...167 Operacje na a cuchach...168 Tablice a cuchów...170 a cuchy s niezmienne...171 a cuchy steruj ce instrukcj switch...172 Wykorzystanie argumentów wywo ania programu...173 Operatory bitowe...175 Operatory bitowe AND, OR, XOR i NOT...175 Operatory przesuni cia...179 Skrótowe bitowe operatory przypisania...181 Przyk ad 5.3. Klasa ShowBits...182

6 Java. Przewodnik dla pocz tkuj cych Operator?...184 Test sprawdzaj cy...186 Rozdzia 6. Wi cej o metodach i klasach...189 Kontrola dost pu do sk adowych klasy...189 Modyfikatory dost pu w Javie...190 Przyk ad 6.1. Ulepszamy klas Queue...194 Przekazywanie obiektów metodom...195 Sposób przekazywania argumentów...196 Zwracanie obiektów...199 Przeci anie metod...201 Przeci anie konstruktorów...205 Przyk ad 6.2. Przeci amy konstruktor klasy Queue...207 Rekurencja...210 S owo kluczowe static...212 Bloki static...215 Przyk ad 6.3. Algorytm Quicksort...216 Klasy zagnie d one i klasy wewn trzne...218 Zmienne liczby argumentów...221 Metody o zmiennej liczbie argumentów...222 Przeci anie metod o zmiennej liczbie argumentów...225 Zmienna liczba argumentów i niejednoznaczno...226 Test sprawdzaj cy...227 Rozdzia 7. Dziedziczenie... 229 Podstawy dziedziczenia...230 Dost p do sk adowych a dziedziczenie...232 Konstruktory i dziedziczenie...235 U ycie s owa kluczowego super do wywo ania konstruktora klasy bazowej...237 U ycie s owa kluczowego super do dost pu do sk adowych klasy bazowej...240 Przyk ad 7.1. Tworzymy hierarchi klas Vehicle...241 Wielopoziomowe hierarchie klas...244 Kiedy wywo ywane s konstruktory?...247 Referencje klasy bazowej i obiekty klasy pochodnej...248 Przes anianie metod...252 Przes anianie metod i polimorfizm...255 Po co przes ania metody?...257 Zastosowanie przes aniania metod w klasie TwoDShape...257 Klasy abstrakcyjne...260 S owo kluczowe final...264 final zapobiega przes anianiu...264 final zapobiega dziedziczeniu...265 U ycie final dla zmiennych sk adowych...265 Klasa Object...267 Test sprawdzaj cy...268 Rozdzia 8. Pakiety i interfejsy... 269 Pakiety...269 Definiowanie pakietu...270 Wyszukiwanie pakietów i zmienna CLASSPATH...271 Prosty przyk ad pakietu...272 Pakiety i dost p do sk adowych...273 Przyk ad dost pu do pakietu...274 Sk adowe protected...275 Import pakietów...277

Spis tre ci 7 Biblioteka klas Java u ywa pakietów...279 Interfejsy...279 Implementacje interfejsów...281 Referencje interfejsu...284 Przyk ad 8.1. Tworzymy interfejs Queue...286 Zmienne w interfejsach...290 Interfejsy mog dziedziczy...291 Test sprawdzaj cy...293 Rozdzia 9. Obs uga wyj tków...295 Hierarchia wyj tków...296 Podstawy obs ugi wyj tków...296 S owa kluczowe try i catch...297 Prosty przyk ad wyj tku...298 Konsekwencje nieprzechwycenia wyj tku...300 Wyj tki umo liwiaj obs ug b dów...301 U ycie wielu klauzul catch...302 Przechwytywanie wyj tków klas pochodnych...303 Zagnie d anie bloków try...304 Generowanie wyj tku...305 Powtórne generowanie wyj tku...306 Klasa Throwable...307 Klauzula finally...309 U ycie klauzuli throws...311 Nowo ci w JDK 7...312 Wyj tki wbudowane w Jav...313 Tworzenie klas pochodnych wyj tków...315 Przyk ad 9.1. Wprowadzamy wyj tki w klasie Queue...317 Test sprawdzaj cy...320 Rozdzia 10. Obs uga wej cia i wyj cia...323 Strumienie wej cia i wyj cia...324 Strumienie bajtowe i strumienie znakowe...324 Klasy strumieni bajtowych...325 Klasy strumieni znakowych...326 Strumienie predefiniowane...326 U ywanie strumieni bajtowych...327 Odczyt wej cia konsoli...328 Zapis do wyj cia konsoli...329 Odczyt i zapis plików za pomoc strumieni bajtowych...330 Odczyt z pliku...330 Zapis w pliku...334 Automatyczne zamykanie pliku...336 Odczyt i zapis danych binarnych...339 Przyk ad 10.1. Narz dzie do porównywania plików...341 Pliki o dost pie swobodnym...343 Strumienie znakowe...345 Odczyt konsoli za pomoc strumieni znakowych...345 Obs uga wyj cia konsoli za pomoc strumieni znakowych...349 Obs uga plików za pomoc strumieni znakowych...350 Klasa FileWriter...350 Klasa FileReader...351 Zastosowanie klas opakowuj cych do konwersji a cuchów numerycznych...352 Przyk ad 10.2. System pomocy wykorzystuj cy pliki...355 Test sprawdzaj cy...361

8 Java. Przewodnik dla pocz tkuj cych Rozdzia 11. Programowanie wielow tkowe...363 Podstawy wielow tkowo ci...364 Klasa Thread i interfejs Runnable...365 Tworzenie w tku...365 Drobne usprawnienia...369 Przyk ad 11.1. Tworzymy klas pochodn klasy Thread...370 Tworzenie wielu w tków...372 Jak ustali, kiedy w tek zako czy dzia anie?...375 Priorytety w tków...378 Synchronizacja...380 Synchronizacja metod...381 Synchronizacja instrukcji...384 Komunikacja mi dzyw tkowa...386 Przyk ad u ycia metod wait() i notify()...387 Wstrzymywanie, wznawianie i ko czenie dzia ania w tków...392 Przyk ad 11.2. Wykorzystanie g ównego w tku...396 Test sprawdzaj cy...397 Rozdzia 12. Typy wyliczeniowe, automatyczne opakowywanie, import sk adowych statycznych i adnotacje...399 Wyliczenia...400 Podstawy wylicze...400 Wyliczenia s klasami...403 Metody values() i valueof()...403 Konstruktory, metody, zmienne instancji a wyliczenia...404 Dwa wa ne ograniczenia...406 Typy wyliczeniowe dziedzicz po klasie Enum...406 Przyk ad 12.1. Komputerowo sterowana sygnalizacja wietlna...408 Automatyczne opakowywanie...413 Typy opakowuj ce...413 Podstawy automatycznego opakowywania...415 Automatyczne opakowywanie i metody...416 Automatyczne opakowywanie i wyra enia...418 Przestroga...419 Import sk adowych statycznych...420 Adnotacje (metadane)...422 Test sprawdzaj cy...425 Rozdzia 13. Generyczno... 427 Podstawy generyczno ci...428 Prosty przyk ad generyczno ci...428 Generyczno dotyczy tylko obiektów...432 Typy generyczne ró ni si dla ró nych argumentów...432 Klasa generyczna o dwóch parametrach...433 Ogólna posta klasy generycznej...434 Ograniczanie typów...434 Stosowanie argumentów wieloznacznych...438 Ograniczanie argumentów wieloznacznych...440 Metody generyczne...443 Konstruktory generyczne...445 Interfejsy generyczne...445 Przyk ad 13.1. Generyczna klasa Queue...448 Typy surowe i tradycyjny kod...452 Wnioskowanie typów i operator diamentowy...455 Wymazywanie...456

Spis tre ci 9 B dy niejednoznaczno ci...457 Ograniczenia zwi zane z generyczno ci...458 Zakaz tworzenia instancji parametru okre laj cego typ...458 Ograniczenia dla sk adowych statycznych...458 Ograniczenia tablic generycznych...459 Ograniczenia zwi zane z wyj tkami...460 Dalsze studiowanie zagadnienia generyczno ci...460 Test sprawdzaj cy...461 Rozdzia 14. Aplety, zdarzenia i pozosta e s owa kluczowe...463 Podstawy apletów...464 Organizacja apletów i podstawowe elementy...467 Architektura apletu...467 Kompletny szkielet apletu...468 Rozpocz cie i zako czenie dzia ania apletu...469 danie odrysowania...470 Metoda update()...471 Przyk ad 14.1. Prosty aplet wy wietlaj cy baner...471 Wykorzystanie okna statusu...475 Parametry apletów...475 Klasa Applet...477 Obs uga zdarze...479 Model delegacji zdarze...479 Zdarzenia...479 ród a zdarze...479 S uchacze zdarze...480 Klasy zdarze...480 Interfejsy s uchaczy zdarze...480 Wykorzystanie modelu delegacji zdarze...481 Obs uga zdarze myszy...482 Prosty aplet obs uguj cy zdarzenia myszy...483 Inne s owa kluczowe Javy...486 Modyfikatory transient i volatile...486 Operator instanceof...486 S owo kluczowe strictfp...487 S owo kluczowe assert...487 Metody natywne...488 Test sprawdzaj cy...490 Rozdzia 15. Wprowadzenie do Swing... 491 Pochodzenie i filozofia Swing...492 Komponenty i kontenery...494 Komponenty...494 Kontenery...495 Panele kontenerów szczytowych...495 Mened ery uk adu...496 Pierwszy program wykorzystuj cy Swing...497 Pierwszy program Swing wiersz po wierszu...498 Komponent JButton...502 Komponent JTextField...506 Komponent JCheckBox...509 Komponent JList...512 Przyk ad 15.1. Porównywanie plików aplikacja Swing...516 Wykorzystanie anonimowych klas wewn trznych do obs ugi zdarze...521 Aplety Swing...522

10 Java. Przewodnik dla pocz tkuj cych Co dalej?...524 Test sprawdzaj cy...525 Dodatek A Rozwi zania testów sprawdzaj cych...527 Rozdzia 1. Podstawy Javy...527 Rozdzia 2. Typy danych i operatory...529 Rozdzia 3. Instrukcje steruj ce...531 Rozdzia 4. Wprowadzenie do klas, obiektów i metod...533 Rozdzia 5. Wi cej typów danych i operatorów...535 Rozdzia 6. Wi cej o metodach i klasach...538 Rozdzia 7. Dziedziczenie...543 Rozdzia 8. Pakiety i interfejsy...545 Rozdzia 9. Obs uga wyj tków...546 Rozdzia 10. Obs uga wej cia i wyj cia...549 Rozdzia 11. Programowanie wielow tkowe...552 Rozdzia 12. Typy wyliczeniowe, automatyczne opakowywanie, import sk adowych statycznych i adnotacje...554 Rozdzia 13. Generyczno...558 Rozdzia 14. Aplety, zdarzenia i pozosta e s owa kluczowe...562 Rozdzia 15. Wprowadzenie do Swing...567 Dodatek B Komentarze dokumentacyjne...573 Znaczniki javadoc...573 @author...574 {@code...575 @deprecated...575 {@docroot...575 @exception...575 {@inheritdoc...575 {@link...575 {@linkplain...576 {@literal...576 @param...576 @return...576 @see...576 @serial...577 @serialdata...577 @serialfield...577 @since...577 @throws...577 {@value...578 @version...578 Ogólna posta komentarza dokumentacyjnego...578 Wynik dzia ania programu javadoc...579 Przyk ad u ycia komentarzy dokumentacyjnych...579 Skorowidz... 581

Rozdzia 11. Programowanie wielow tkowe W tym rozdziale poznasz: podstawy wielow tkowo ci, klas Thread i interfejs Runnable, tworzenie w tku, tworzenie wielu w tków, sposób ustalania zako czenia w tku, korzystanie z priorytetów w tków, synchronizacj w tków, synchronizacj metod, synchronizacj bloków, komunikacj mi dzyw tkow, wstrzymywanie, wznawianie i ko czenie dzia ania w tków. Chocia Java dostarcza programistom wielu innowacyjnych mo liwo ci, to z pewno ci jedn z najbardziej ekscytuj cych jest obs uga programowania wielow tkowego. Program wielow tkowy zawiera dwie lub wi cej cz ci, które mog dzia a równolegle. Ka d z tych cz ci nazywamy w tkiem, a ka dy w tek definiuje osobn cie k wykonania. Wielow tkowo jest zatem szczególn form wielozadaniowo ci.

364 Java. Przewodnik dla pocz tkuj cych Podstawy wielow tkowo ci Istniej dwa podstawowe typy wielozadaniowo ci, z których jeden opiera si na procesach, a drugi wykorzystuje w tki. Wa ne jest, aby zrozumia ró nice mi dzy nimi. Proces odpowiada w zasadzie wykonywanemu programowi. Zatem wielozadaniowo wykorzystuj ca procesy umo liwia Twojemu komputerowi równoleg e wykonywanie dwóch lub wi cej programów. Wykorzystanie procesów umo liwi Ci na przyk ad uruchomienie kompilatora Javy w tym samym czasie, gdy piszesz kod ród owy w edytorze lub przegl dasz strony w Internecie. W przypadku wielozadaniowo ci wykorzystuj cej procesy program jest najmniejsz jednostk kodu podlegaj c szeregowaniu do wykonania przez procesor. W drugim rodzaju wielozadaniowo ci najmniejsz jednostk kodu szeregowan przez system jest w tek. Oznacza to, e pojedynczy program mo e równocze nie wykonywa dwa lub wi cej w tków. Na przyk ad edytor tekstu mo e w tym samym czasie formatowa jeden tekst i drukowa inny, pod warunkiem e obie akcje s wykonywane przez osobne w tki. Chocia Java wykorzystuje rodowiska wielozadaniowe oparte na procesach, to nie umo liwia sterowania ich dzia aniem. W przypadku w tków sprawy maj si inaczej. Podstawow zalet wielow tkowo ci jest mo liwo tworzenia efektywnie dzia aj cych programów, poniewa wielow tkowo pozwala wykorzysta okresy bezczynno ci pojawiaj ce si w dzia aniu wi kszo ci programów. Wi kszo urz dze wej cia i wyj cia takich jak porty sieciowe, nap dy dyskowe czy klawiatura dzia a znacznie wolniej od procesora. Z tego powodu program cz sto sp dza wiele czasu na oczekiwaniu na mo liwo wys ania lub odebrania danych za po rednictwem urz dzenia. Zastosowanie wielow tkowo ci pozwala programowi wykonywa w tym czasie inne zadania. Na przyk ad w czasie gdy jedna cz programu wysy a plik w Internecie, inna mo e zajmowa si odczytem klawiatury, a jeszcze inna buforowa kolejny blok wysy anych danych. W ostatnich kilku latach mamy do czynienia z upowszechnieniem si systemów wieloprocesorowych i wielordzeniowych. Oczywi cie nie wypar y one zupe nie systemów jednoprocesorowych. Wielow tkowo w Javie mo e dzia a w obu typach systemów. W przypadku systemu jednordzeniowego wykonywane równolegle w tki wspó dziel procesor i ka dy w tek otrzymuje pewien przedzia czasu procesora. Zatem w systemie jednordzeniowym dwa lub wi cej w tków nie jest w rzeczywisto ci wykonywanych równocze nie, ale ich zastosowanie pozwala wykorzysta czas bezczynno ci procesora. Natomiast w systemach wieloprocesorowych b d wielordzeniowych w tki rzeczywi cie mog dzia a równolegle. W wielu przypadkach pozwala to jeszcze bardziej poprawi efektywno dzia ania programu i zwi kszy szybko wykonywania niektórych operacji. W tek mo e znajdowa si w jednym z kilku stanów. Mo e by wykonywany. Mo e by gotowy do wykonywania, gdy tylko otrzyma czas procesora. Wykonanie w tku mo e zosta zawieszone, co oznacza, e w tek nie jest wykonywany przez pewien czas. Jego wykonywanie mo e zosta pó niej podj te. W tek mo e zosta zablokowany w oczekiwaniu na zwolnienie pewnego zasobu. I wreszcie wykonywanie w tku mo e zosta zako czone, co oznacza, e nie mo na ju go podj. Wielow tkowo wi e si nierozerwalnie z poj ciem synchronizacji, która umo liwia skoordynowane dzia anie wielu w tków. Java dysponuje kompletnym podsystemem synchronizacji. Jego podstawowe mo liwo ci równie omówi w tym rozdziale.

Rozdzia 11. Programowanie wielow tkowe 365 Je li programowa e ju na przyk ad w systemie Windows, to by mo e masz pewne poj cie o wielow tkowo ci. Java umo liwia zarz dzanie w tkami za pomoc odpowiednich elementów j zyka, co czyni programowanie wielow tkowe szczególnie wygodnym, poniewa wiele jego szczegó ów Java obs uguje za Ciebie. Klasa Thread i interfejs Runnable Wielow tkowo w Javie bazuje na klasie Thread i towarzysz cym jej interfejsie Runnable, które umieszczono w pakiecie java.lang. Klasa Thread hermetyzuje w tek. Je li chcesz stworzy w programie nowy w tek, powiniene utworzy obiekt klasy pochodnej klasy Thread albo zaimplementowa interfejs Runnable. Klasa Thread definiuje szereg metod pomagaj cych zarz dza w tkami. Najcz ciej u ywane z tych metod przedstawi em w tabeli 11.1 (przyjrzymy si im bli ej podczas ich u ycia w przyk adach). Tabela 11.1. Wybrane metody klasy Thread Metoda Znaczenie final String getname( ) Zwraca nazw w tku. final int getpriority( ) Zwraca priorytet w tku. final boolean isalive( ) Sprawdza, czy w tek jest nadal wykonywany. final void join( ) Czeka na zako czenie w tku. void run( ) Punkt wej cia w tku. static void sleep(long milisekund) Zawiesza wykonywanie w tku na podan liczb milisekund. void start( ) Rozpoczyna wykonywanie w tku przez wywo anie metody run( ). Wszystkie procesy maj przynajmniej jeden w tek wykonania, zwykle nazywany w tkiem g ównym, poniewa jego wykonanie rozpoczyna si w momencie uruchomienia programu. Mo emy zatem powiedzie, e we wszystkich dotychczasowych przyk adach u ywali my w tku g ównego. W w tku g ównym mo esz tworzy kolejne w tki programu. Tworzenie w tku W tek powstaje przez utworzenie obiektu typu Thread. Klasa Thread hermetyzuje obiekt, który mo e by wykonywany. Jak ju wspomnia em, Java umo liwia dwa sposoby tworzenia takich obiektów: poprzez implementacj interfejsu Runnable, poprzez tworzenie klas pochodnych klasy Thread. W wi kszo ci przyk adów w tym rozdziale b dziemy implementowa interfejs Runnable. Natomiast w przyk adzie 11.1 zademonstruj, jak zaimplementowa w tek, tworz c klas

366 Java. Przewodnik dla pocz tkuj cych pochodn klasy Thread. Zapami taj: oba podej cia i tak u ywaj klasy Thread do tworzenia w tku i zarz dzania nim. Jedyna ró nica polega na sposobie, w jaki powstaje klasa reprezentuj ca w tki. Interfejs Runnable stanowi abstrakcj wykonywalnego kodu. W tek mo esz utworzy na podstawie ka dego obiektu, który implementuje interfejs Runnable. Interfejs ten ma tylko jedn metod o nazwie run() zadeklarowan w nast puj cy sposób: public void run() Wewn trz metody run() umieszczasz kod wykonywany przez nowy w tek. Podobnie jak g ówny w tek programu, tak i metoda run()mo e wywo ywa inne metody, u ywa innych klas i deklarowa zmienne. Jedyna ró nica polega na tym, e metoda run() jest punktem wej cia do osobnego, równolegle wykonywanego w tku programu. Wykonywanie tego w tku ko czy si, gdy metoda run() zwróci sterowanie. Po utworzeniu klasy implementuj cej interfejs Runnable na podstawie jej obiektu tworzysz obiekt typu Thread. Klasa Thread definiuje szereg konstruktorów. Na pocz tek b dziemy u ywa poni szego: Thread(Runnable obw tku) W tym przypadku parametr obw tku jest instancj klasy implementuj cej interfejs Runnable. Definiuje on punkt, w którym rozpocznie si wykonywanie nowego w tku. Po utworzeniu nowy w tek nie b dzie wykonywany, dopóki nie wywo asz jego metody start() zadeklarowanej w klasie Thread. Dzia anie metody start() sprowadza si w zasadzie do wywo ania metody run(). Poni ej przedstawi em deklaracj metody start(): void start() Na listingu 11.1 przedstawi em przyk ad programu, który tworzy nowy w tek i rozpoczyna jego wykonywanie. Listing 11.1. UseThreads.java // Tworzy w tek, implementuj c interfejs Runnable. class MyThread implements Runnable { String thrdname; Obiekty klasy MyThread mog by wykonywane we w asnych w tkach, poniewa klasa MyThread implementuje interfejs Runnable. MyThread(String name) { thrdname = name; // Punkt wej ciowy w tku. public void run() { Tutaj rozpoczyna si wykonywanie w tku. System.out.println(thrdName + " rozpoczyna dzia anie."); try { for(int count=0; count < 10; count++) { Thread.sleep(400); System.out.println(thrdName + " jest wykonywany, warto licznika: " + count);

Rozdzia 11. Programowanie wielow tkowe 367 catch(interruptedexception exc) { System.out.println(thrdName + " zosta przerwany."); System.out.println(thrdName + " ko czy dzia anie."); class UseThreads { public static void main(string args[]) { System.out.println("G ówny w tek rozpoczyna dzia anie."); // Najpierw tworzy obiekt klasy MyThread. MyThread mt = new MyThread("W tek potomny nr 1"); // Nast pnie na jego podstawie tworzy w tek. Thread newthrd = new Thread(mt); // Na koniec rozpoczyna wykonywanie w tku. newthrd.start(); Uruchamia w tek. for(int i=0; i<50; i++) { System.out.print("."); try { Thread.sleep(100); catch(interruptedexception exc) { System.out.println("W tek g ówny zosta przerwany."); Tworzy w tek dla tego obiektu. Tworzy obiekt implementuj cy interfejs Runnable. System.out.println("W tek g ówny ko czy dzia anie."); Przyjrzyjmy si bli ej temu programowi. Najpierw klasa MyThread implementuje interfejs Runnable. Oznacza to, e obiekt typu MyThread mo e zosta przekazany konstruktorowi klasy i by wykonywany we w asnym w tku. Wewn trz metody run() dzia a p tla for odliczaj ca od 0 do 9. Zwró uwag na wywo anie metody sleep(). Metoda sleep() powoduje zawieszenie w tku, w którym zosta a wywo ana, na czas wyra ony w milisekundach. Jej deklaracj przedstawi em poni ej: static void sleep(long milisekund) throwws InterruptedException Wykonywanie w tku zostaje zawieszone na czas milisekund. Metoda sleep() mo e wygenerowa wyj tek InterruptedException i wobec tego musi by wywo ywana w bloku try. Metoda sleep() ma równie drug wersj, która umo liwia okre lenie czasu zawieszenia w tku z dok adno ci nie tylko co do milisekundy, ale równie nanosekundy, je li potrzebujesz a takiej precyzji. W naszym przyk adzie metoda sleep() wywo ywana przez metod run() zawiesza wykonywanie w tku na 400 milisekund podczas ka dego przebiegu p tli. Dzi ki temu spowolnieniu mo emy obserwowa wykonywanie w tku. Wewn trz metody main() nowy obiekt typu Thread zostaje utworzony na skutek wykonania poni szej sekwencji instrukcji:

368 Java. Przewodnik dla pocz tkuj cych // Najpierw tworzy obiekt klasy MyThread. MyThread mt = new MyThread("W tek potomny nr 1"); // Nast pnie na jego podstawie tworzy w tek. Thread newthrd = new Thread(mt); // Na koniec rozpoczyna wykonywanie w tku. newthrd.start(); Jak sugeruj to komentarze, najpierw zostaje utworzony obiekt klasy MyThread. Obiekt ten zostaje nast pnie u yty do stworzenia obiektu typu Thread. Jest to mo liwe, poniewa klasa MyThread implementuje interfejs Runnable. Na koniec wykonywanie nowego w tku rozpoczyna si dzi ki wywo aniu metody start(). Wywo uje ona metod run() nowego w tku. Po wywo aniu metody start() sterowanie powraca do metody main(), która rozpoczyna wykonywanie w asnej p tli for. P tla ta wykonywana jest 50 razy i w ka dym przebiegu zawiesza wykonanie g ównego w tku na 100 milisekund. Oba w tki kontynuuj swoje dzia anie, wspó dziel c procesor (w systemie jednoprocesorowym). Trwa to a do momentu, w którym zako czy si dzia anie wykonywanych przez nie p tli. Komunikaty wy wietlane przez oba w tki przedstawi em poni ej. Ze wzgl du na ró nice w rodowisku wykonania programu efekt jego dzia ania w Twoim przypadku mo e si nieco ró ni. G ówny w tek rozpoczyna dzia anie..w tek potomny nr 1 rozpoczyna dzia anie....w tek potomny nr 1 jest wykonywany, warto licznika: 0...W tek potomny nr 1 jest wykonywany, warto licznika: 1...W tek potomny nr 1 jest wykonywany, warto licznika: 2...W tek potomny nr 1 jest wykonywany, warto licznika: 3...W tek potomny nr 1 jest wykonywany, warto licznika: 4...W tek potomny nr 1 jest wykonywany, warto licznika: 5...W tek potomny nr 1 jest wykonywany, warto licznika: 6...W tek potomny nr 1 jest wykonywany, warto licznika: 7...W tek potomny nr 1 jest wykonywany, warto licznika: 8...W tek potomny nr 1 jest wykonywany, warto licznika: 9 W tek potomny nr 1 ko czy dzia anie....w tek g ówny ko czy dzia anie. W przyk adzie tym warto zwróci uwag na jeszcze jedn rzecz. Aby zilustrowa fakt równoczesnego wykonywania w tku g ównego i w tku mt, musia em unikn zako czenia dzia- ania metody main(), zanim w tek mt zako czy swoje dzia anie. W tym celu wykorzysta em ró nice czasowe w dzia aniu obu w tków. Poniewa wywo ania metody sleep() w p tli for metody main() powoduj ca kowite opó nienie równe 5 sekund (50 iteracji po 100 sekund ka da), a ca kowite opó nienie wewn trz p tli for metody run() wynosi jedynie 4 sekundy (10 iteracji po 400 milisekund ka da), metoda run() zako czy dzia anie sekund wcze niej ni metoda main(). W efekcie w tek g ówny i w tek mt s wykonywane równolegle do momentu zako czenia w tku mt. Wykonywanie w tku g ównego (metody main()) ko czy si sekund pó niej. Chocia wykorzystanie ró nic czasowych pozwoli o mi zademonstrowa równoleg e dzia anie w tków, rozwi zania takiego nie stosuje si w praktyce. Java udost pnia znacznie lepsze sposoby oczekiwania na zako czenie w tku. Jeden z nich omówi w dalszej cz ci rozdzia u. I jeszcze jedno: w przypadku programów wielow tkowych najcz ciej b dziemy chcieli, aby w tek g ówny ko czy swoje dzia anie jako ostatni. W ogólnym przypadku program dzia a,

Rozdzia 11. Programowanie wielow tkowe 369 dopóki nie zako czy si wykonywanie wszystkich jego w tków. Zatem nie jest wymagane, by w tek g ówny ko czy swoje dzia anie jako ostatni. Ale cz sto jest to przyk adem dobrej praktyki programistycznej, zw aszcza gdy dopiero uczysz si korzystania z w tków. Drobne usprawnienia Chocia poprzedni program jest zupe nie poprawny, niewielkie modyfikacje mog usprawni jego dzia anie i u atwi jego u ycie. Po pierwsze, mo emy rozpocz wykonywanie w tku natychmiast po jego utworzeniu. W tym celu tworzymy obiekt Thread wewn trz konstruktora klasy MyThread. Po drugie, klasa MyThread nie musi przechowywa nazwy w tku, poniewa mo emy nada mu j podczas tworzenia. W tym celu u yjemy nast puj cej wersji konstruktora klasy Thread: Thread(Runnable obw tku, String nazwa) W tym przypadku parametr nazwa okre la oczywi cie nazw w tku. Ekspert odpowiada Pytanie: Dlaczego zalecasz, aby g ówny w tek ko czy dzia anie jako ostatni? Odpowied : W starszych wersjach Javy zako czenie dzia ania g ównego w tku przed zako czeniem dzia ania w tku potomnego mog o powodowa b d dzia ania maszyny wirtualnej. Nowoczesne wersje Javy nie stwarzaj ju tego rodzaju problemów. Lepiej jednak zachowa ostro no, poniewa nigdy nie wiemy, w jakim rodowisku przyjdzie dzia a naszemu programowi. Dodatkowo w tek g ówny jest doskona ym miejscem do wykonania operacji zwi zanych z zako czeniem dzia ania programu, na przyk ad zamkni cia plików. Z tego powodu cz sto rzeczywi cie ma sens, aby ko czy on swoje dzia anie jako ostatni. Na szcz cie bardzo atwo mo emy zaprogramowa oczekiwanie w tku g ównego na zako czenie dzia ania wszystkich jego w tków potomnych. Nazw w tku mo emy uzyska, wywo uj c metod getname() zdefiniowan w klasie Thread. Jej ogóln posta przedstawi em poni ej: final String getname() Chocia nie jest to konieczne, w naszym nast pnym programie mo esz nada nazw w tkowi po jego utworzeniu. W tym celu u yjesz metody setname() przedstawionej poni ej: final void setname(string nazwaw tku) Ulepszon wersj poprzedniego programu przedstawi em na listingu 11.2. Listing 11.2. UseThreadsImproved.java // Ulepszona wersja klasy MyThread. class MyThread implements Runnable { Thread thrd; Zmienna thrd przechowuje referencj w tku. // Tworzy nowy w tek. MyThread(String name) { thrd = new Thread(this, name); thrd.start(); // uruchamia nowy w tek W tek otrzymuje nazw w momencie utworzenia. Uruchamia w tek.

370 Java. Przewodnik dla pocz tkuj cych // Rozpoczyna wykonywanie nowego w tku. public void run() { System.out.println(thrd.getName() + " rozpoczyna dzia anie."); try { for(int count=0; count<10; count++) { Thread.sleep(400); System.out.println(thrd.getName() + " jest wykonywany, warto licznika: " + count); catch(interruptedexception exc) { System.out.println(thrd.getName() + " zosta przerwany."); System.out.println(thrd.getName() + " ko czy dzia anie."); class UseThreadsImproved { public static void main(string args[]) { System.out.println("G ówny w tek rozpoczyna dzia anie."); MyThread mt = new MyThread("W tek potomny nr 1"); for(int i=0; i < 50; i++) { Teraz w tek zostaje uruchomiony w momencie utworzenia. System.out.print("."); try { Thread.sleep(100); catch(interruptedexception exc) { System.out.println("W tek g ówny zosta przerwany."); System.out.println("W tek g ówny ko czy dzia anie."); Ta wersja programu wy wietla takie same komunikaty jak poprzednia. Zwró uwag, e referencj w tku przechowuje sk adowa thrd klasy MyThread. Przyk ad 11.1. Tworzymy klas pochodn klasy Thread ExtendThread.java Implementacja interfejsu Runnable jest jednym ze sposobów tworzenia klasy reprezentuj cej w tki. Drugi sposób polega na utworzeniu klasy w tków jako klasy pochodnej klasy Thread. W tym przyk adzie utworzymy w a nie klas pochodn klasy Thread i wykorzystamy j w programie, którego funkcjonalno b dzie odpowiada programowi UseThreadsImproved. Tworz c klas pochodn klasy Thread, musimy przes oni jej metod run() stanowi c punkt wej cia do nowego w tku. Nowa klasa musi równie wywo a metod start(), aby rozpocz wykonywanie nowego w tku. Mo esz równie przes oni inne metody klasy Thread(), ale nie jest to wymagane.

Rozdzia 11. Programowanie wielow tkowe 371 1. Utwórz plik o nazwie ExtendThread.java. Skopiuj do niego kod ród owy z pliku UseThreadsImproved.java. 2. Zmie deklaracj klasy Thread tak, aby zamiast implementowa interfejs Runnable, dziedziczy a po klasie Thread: class MyThread extends Thread { 3. Usu poni szy wiersz: Thread thrd; Zmienna sk adowa thrd nie jest ju potrzebna, poniewa instancja klasy MyThread zawiera instancj klasy Thread, do której mo e si odwo ywa. 4. Zmie konstruktor klasy MyThread w nast puj cy sposób: // Tworzy nowy w tek. MyThread(String name) { super(name); // nazwa w tku start(); // uruchamia w tek Wywo anie super zostaje u yte w celu uruchomienia nast puj cego konstruktora klasy Thread: Thread(String nazwa) gdzie parametr nazwa okre la oczywi cie nazw tworzonego w tku. 5. Zmie metod run() tak, aby bezpo rednio, czyli bez u ycia zmiennej thrd, wywo ywa a metod getname(): // Rozpoczyna wykonywanie nowego w tku. public void run() { System.out.println(getName() + " rozpoczyna dzia anie."); try { for(int count=0; count < 10; count++) { Thread.sleep(400); System.out.println(getName() + " jest wykonywany, warto licznika: " + count); catch(interruptedexception exc) { System.out.println(getName() + " zosta przerwany."); System.out.println(getName() + " zosta przerwany."); 6. Na listingu 11.3 przedstawi em kompletny tekst ród owy programu, który w obecnej wersji tworzy klas pochodn klasy Thread, zamiast implementowa interfejs Runnable. Wynik dzia ania wy wietlany przez program b dzie taki sam jak w przypadku poprzednich wersji programu. Listing 11.3. ExtendThread.java /* Przyk ad 11.1 Tworzy klas pochodn klasy Thread.

372 Java. Przewodnik dla pocz tkuj cych */ class MyThread extends Thread { // Tworzy nowy w tek. MyThread(String name) { super(name); // nazwa w tku start(); // uruchamia w tek // Rozpoczyna wykonywanie nowego w tku. public void run() { System.out.println(getName() + " rozpoczyna dzia anie."); try { for(int count=0; count < 10; count++) { Thread.sleep(400); System.out.println(getName() + " jest wykonywany, warto licznika: " + count); catch(interruptedexception exc) { System.out.println(getName() + " zosta przerwany."); System.out.println(getName() + " zosta przerwany."); class ExtendThread { public static void main(string args[]) { System.out.println("G ówny w tek rozpoczyna dzia anie."); MyThread mt = new MyThread("W tek potomny nr 1"); for(int i=0; i < 50; i++) { System.out.print("."); try { Thread.sleep(100); catch(interruptedexception exc) { System.out.println("W tek g ówny zosta przerwany."); System.out.println("W tek g ówny ko czy dzia anie."); Tworzenie wielu w tków W poprzednich przyk adach tworzyli my tylko jeden w tek potomny. Nic nie stoi jednak na przeszkodzie, aby Twój program tworzy dowoln, potrzebn liczb w tków. Program przedstawiony na listingu 11.4 tworzy trzy w tki potomne.