Java, współbieżność dla praktyków
Book information
Description
Twórz bezpieczne i wydajne aplikacje wielowątkowe Chcesz podnieść wydajność swoich aplikacji? Planujesz stworzenie systemu, który będzie uruchamiany na maszynach wyposażonych w procesory wielordzeniowe? A może próbowałeś już tworzyć aplikacje wielowątkowe, ale zniechęciłeś się po wielogodzinnych poszukiwaniach przyczyn błędów, które pojawiają się przy wysokich obciążeniach? Java niemal od początku swego istnienia jest wyposażona w mechanizmy umożliwiające tworzenie aplikacji wielowątkowych, lecz dopiero wersja 5. wniosła zupełnie nową jakość, dzięki wielu poprawkom zwiększającym wydajność maszyny wirtualnej oraz dodatkowym klasom ułatwiającym osiąganie lepszej współbieżności. W książce "Java. Współbieżność dla praktyków" znajdziesz wyczerpujący opis metod projektowania i tworzenia aplikacji wielowątkowych. Przeczytasz nie tylko o klasach, ich działaniu i sposobach wykorzystania, ale również poznasz wzorce projektowe, praktyki programistyczne i modele, dzięki którym programowanie współbieżne jest łatwiejsze. Znajdziesz tu praktyczne aspekty oraz przykłady tworzenia pewnych, skalowalnych i łatwych w konserwacji aplikacji współbieżnych. Dowiesz się także, w jaki sposób testować aplikacje wielowątkowe, wynajdywać w nich błędy i usuwać je. Dzięki książce poznasz: Możliwości wykorzystania wątków Podstawy stosowania wątków Współdzielenie obiektów Struktura aplikacji wielowątkowych Zarządzanie wątkami i zadaniami Zastosowania pul wątków Optymalizowanie wydajności Skalowalność aplikacji wielowątkowych Testowanie aplikacji współbieżnych Model pamięci Javy Tworzenie własnych synchronizatorów Przedmowa (9) Rozdział 1. Wprowadzenie (13) 1.1. (Bardzo) krótka historia współbieżności (13) 1.2. Zalety wątków (15) 1.3. Ryzyka związane z wątkami (18) 1.4. Wątki są wszędzie (21) Część I Podstawy (25) Rozdział 2. Wątki i bezpieczeństwo (27) 2.1. Czym jest bezpieczeństwo wątkowe? (29) 2.2. Niepodzielność (31) 2.3. Blokady (35) 2.4. Ochrona stanu za pomocą blokad (39) 2.5. Żywotność i wydajność (41) Rozdział 3. Współdzielenie obiektów (45) 3.1. Widoczność (45) 3.2. Publikacja i ucieczka (51) 3.3. Odosobnienie w wątku (54) 3.4. Niezmienność (58) 3.5. Bezpieczna publikacja (61) Rozdział 4. Kompozycja obiektów (67) 4.1. Projektowanie klasy bezpiecznej wątkowo (67) 4.2. Odosobnienie egzemplarza (71) 4.3. Delegacja bezpieczeństwa wątkowego (76) 4.4. Dodawanie funkcjonalności do istniejących klas bezpiecznych wątkowo (82) 4.5. Dokumentowanie strategii synchronizacji (86) Rozdział 5. Bloki budowania aplikacji (89) 5.1. Kolekcje synchronizowane (89) 5.2. Kolekcje współbieżne (94) 5.3. Kolejki blokujące oraz wzorzec producenta i konsumenta (97) 5.4. Metody blokujące i przerywane (102) 5.5. Synchronizatory (104) 5.6. Tworzenie wydajnego, skalowalnego bufora wyników (112) Podsumowanie części I (117) Część II Struktura aplikacji współbieżnej (119) Rozdział 6. Wykonywanie zadań (121) 6.1. Wykonywanie zadań w wątkach (121) 6.2. Szkielet Executor (125) 6.3. Znajdowanie sensownego zrównoleglenia (132) Podsumowanie (141) Rozdział 7. Anulowanie i wyłączanie zadań (143) 7.1. Anulowanie zadań (144) 7.2. Zatrzymanie usługi wykorzystującej wątki (158) 7.3. Obsługa nietypowego zakończenia wątku (167) 7.4. Wyłączanie maszyny wirtualnej (170) Podsumowanie (173) Rozdział 8. Zastosowania pul wątków (175) 8.1. Niejawnie splecione zadania i strategie wykonania (175) 8.2. Określanie rozmiaru puli wątków (178) 8.3. Konfiguracja klasy ThreadPoolExecutor (179) 8.4. Rozszerzanie klasy ThreadPoolExecutor (187) 8.5. Zrównoleglenie algorytmów rekurencyjnych (188) Podsumowanie (195) Rozdział 9. Aplikacje z graficznym interfejsem użytkownika (197) 9.1. Dlaczego graficzne interfejsy użytkownika są jednowątkowe? (197) 9.2. Krótkie zadanie interfejsu graficznego (201) 9.3. Długie czasowo zadania interfejsu graficznego (203) 9.4. Współdzielone modele danych (208) 9.5. Inne postacie podsystemów jednowątkowych (209) Podsumowanie (210) Część III Żywotność, wydajność i testowanie (211) Rozdział 10. Unikanie hazardu żywotności (213) 10.1. Blokada wzajemna (213) 10.2. Unikanie i diagnostyka blokad wzajemnych (223) Podsumowanie (228) Rozdział 11. Wydajność i skalowalność (229) 11.1. Myślenie na temat wydajności (229) 11.2. Prawo Amdahla (233) 11.3. Koszta wprowadzane przez wątki (237) 11.4. Zmniejszanie rywalizacji o blokadę (240) 11.5. Przykład - porównanie wydajności obiektów Map (250) 11.6. Redukcja narzutu przełączania kontekstu (251) Podsumowanie (253) Rozdział 12. Testowanie programów współbieżnych (255) 12.1. Testy sprawdzające poprawność (256) 12.2. Testowanie wydajności (268) 12.3. Unikanie pomyłek w testach wydajności (273) 12.4. Testy uzupełniające (278) Podsumowanie (281) Część IV Techniki zaawansowane (283) Rozdział 13. Blokady jawne (285) 13.1. Interfejs Lock i klasa ReentrantLock (285) 13.2. Rozważania na temat wydajności (290) 13.3. Uczciwość (291) 13.4. Wybór między synchronized i ReentrantLock (293) 13.5. Blokady odczyt-zapis (294) Podsumowanie (297) Rozdział 14. Tworzenie własnych synchronizatorów (299) 14.1. Zarządzanie zależnością od stanu (299) 14.2. Wykorzystanie kolejek warunków (306) 14.3. Jawne obiekty warunków (314) 14.4. Anatomia synchronizatora (316) 14.5. Klasa AbstractQueuedSynchronizer (318) 14.6. AQS w klasach synchronizatorów pakietu java.util.concurrent (321) Podsumowanie (324) Rozdział 15. Zmienne niepodzielne i synchronizacja nieblokująca (325) 15.1. Wady blokowania (326) 15.2. Sprzętowa obsługa współbieżności (327) 15.3. Klasy zmiennych niepodzielnych (331) 15.4. Algorytmy nieblokujące (335) Podsumowanie (342) Rozdział 16. Model pamięci Javy (343) 16.1. Czym jest model pamięci i dlaczego ma mnie interesować? (343) 16.2. Publikacja (350) 16.3. Bezpieczeństwo inicjalizacji (355) Podsumowanie (356) Dodatki (357) Dodatek A Adnotacje związane ze współbieżnością (359) A.1. Adnotacje dla klas (359) A.2. Adnotacje pól i metod (360) Dodatek B Bibliografia (361) Skorowidz (365)
Similar books
Java Concurrency in Practice
2006 · EPUB
Java Concurrency in Practice
2006 · PDF
Java Concurrency in Practice
2006 · PDF
Programmation concurrente en Java
2006 · PDF
Java Concurrency in Practice
2006 · CHM
Java concurrency in practice
2006 · EPUB
Java concurrency in practice
2006 · PDF
Java. Efektywne programowanie. Wydanie III
2018 · PDF