Współbieżność w Javie. Dariusz Wawrzyniak 1. Dziedziczenie z klasy Thread definicja klasy pochodnej od Thread,

Podobne dokumenty
Współbieżność w Javie

Współbieżność w Javie

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

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

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

Wątki w Javie. Piotr Tokarski

Język Java wątki (streszczenie)

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

Kurs programowania. Wykład 8. Wojciech Macyna. 10 maj 2017

Kurs programowania. Wykład 8. Wojciech Macyna

Język Java wątki (streszczenie)

Programowanie komputerów

Równolegªo± w Javie w tki.

Architektura Systemów Komputerowych. Sterowanie programem skoki Przerwania

Java. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Obliczenia równoległe i rozproszone w JAVIE. Michał Kozłowski 30 listopada 2003

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

Kompozycja i dziedziczenie klas

Programowanie wielowątkowe. Tomasz Borzyszkowski

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

6.1 Pojęcie wątku programu 6.2 Klasy Timer, TimerTask 6.3 Klasa Thread 6.4 Synchronizacja pracy wątków 6.5 Grupowanie wątków

Wdrożenie modułu płatności eservice dla systemu Virtuemart 2.0.x

0.1 Hierarchia klas Diagram Krótkie wyjaśnienie

Programowanie równoległe i rozproszone. W1. Wielowątkowość. Krzysztof Banaś Programowanie równoległe i rozproszone 1

Podstawy współbieżności

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

Języki i Techniki Programowania II. Wykład 7. Współbieżność 1

InsERT GT Własne COM 1.0

Budowa systemów komputerowych

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

elektroniczna Platforma Usług Administracji Publicznej

ZARZĄDZENIE NR 82/15 WÓJTA GMINY WOLA KRZYSZTOPORSKA. z dnia 21 lipca 2015 r.

API transakcyjne BitMarket.pl

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

PL-Warszawa: Usługi szkolenia zawodowego 2012/S Ogłoszenie o zamówieniu. Usługi

Regulamin Programu Karta Stałego Klienta Lovely Look

Wielowątkowość mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011

Aplikacja wielow tkowa prosty komunikator

Pracownia internetowa w każdej szkole. Opiekun pracowni internetowej SBS 2003 PING

Instrukcja programu PControl Powiadowmienia.

Wywoływanie metod zdalnych

Wykład 4 Wybrane zagadnienia programowania w C++

Przetwarzanie równoległe i współbieżne

REGULAMIN SPORT MEETS ELEGANCE

INSTRUKCJA UŻYTKOWANIA. Projekt: Syrena. wersja: Program: Krzysztof Gosławski Kontakt:

WSPÓŁBIEŻNOŚĆ. MATERIAŁY:

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

Proces certyfikacji ISO 9001:2015. Wydanie normy ISO 9001:2015 dotyczące systemów zarządzania jakością obowiązuje od 15 września 2015 roku.

Metoda wykrywania konfliktów zasobowych w aplikacjach wielowątkowych

INSTRUKCJA TESTOWANIA USŁUG NA PLATFORMIE ELA-ENT

Regulamin. Rady Nadzorczej Spółdzielni Mieszkaniowej "Doły -Marysińska" w Łodzi

Java: interfejsy i klasy wewnętrzne

Wątki (Threads) Potrzeby. Przetwarzanie równoległe i współbieŝne. Cechy programowania wątkowego. Concurrent programming is like

Postanowienia ogólne.

Java. Programowanie Obiektowe Mateusz Cicheński

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

ZARZĄDZENIE Nr 338/2016 BURMISTRZA PRUSZCZA GDAŃSKIEGO z dnia 20 kwietnia 2016 r.

SKRÓCONA INSTRUKCJA OBSŁUGI ELEKTRONICZNEGO BIURA OBSŁUGI UCZESTNIKA BADANIA BIEGŁOŚCI

USTAWA. z dnia 26 stycznia 1982 r. Karta Nauczyciela. (tekst jednolity) Rozdział 3a. Awans zawodowy nauczycieli

INSTRUKCJA Panel administracyjny

Programowanie współbieżne Laboratorium nr 11

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Spis treści INTERFEJS (WEBSERVICES) - DOKUMENTACJA TECHICZNA 1

Instrukcja Obsługi STRONA PODMIOTOWA BIP

Praca na wielu bazach danych część 2. (Wersja 8.1)

System kontroli wersji SVN

REGULAMIN PRZESYŁANIA I UDOSTĘPNIANIA FAKTUR W FORMIE ELEKTRONICZNEJ E-FAKTURA ROZDZIAŁ 1. I. Postanowienia ogólne

Regu g l u a l min i n w s w pó p ł ó p ł r p acy O ow o iązuje od dnia

Podstawa prawna: Ustawa z dnia 15 lutego 1992 r. o podatku dochodowym od osób prawnych (t. j. Dz. U. z 2000r. Nr 54, poz. 654 ze zm.

INFORMACJA dla osób nie będących klientami Banku Spółdzielczego w Goleniowie

U M O W A. zwanym w dalszej części umowy Wykonawcą

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

1. Liczba wszystkich otrzymanych przez Użytkownika graficznych ocen sprzedaży na poziomie minimum 100 punktów.

Zarządzanie Zasobami by CTI. Instrukcja

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

OGŁOSZENIE O ZAMÓWIENIU - usługi

Wniosek o ustalenie warunków zabudowy

Programowanie Podstawowe Informacje

Programowanie w języku Java

Bazy danych. Andrzej Łachwa, UJ, /15

Remote Method Invocation 17 listopada rozproszonych. Dariusz Wawrzyniak (IIPP) 1

Podejście obiektowe do budowy systemów rozproszonych

Regulamin oferty Taniej z Energą

Skuteczność i regeneracja 48h albo zwrot pieniędzy

Regulamin Konkursu wiedzy o podatkach. Podatkowy zawrót głowy

PROCEDURY UDZIELANIA ZAMÓWIEŃ PUBLICZNYCH w Powiatowym Urzędzie Pracy w Pile

HAŚKO I SOLIŃSKA SPÓŁKA PARTNERSKA ADWOKATÓW ul. Nowa 2a lok. 15, Wrocław tel. (71) fax (71) kancelaria@mhbs.

Regulamin korzystania z serwisu

Uchwała Nr... Rady Miejskiej Będzina z dnia roku

"A JAK AKTYWNOŚĆ. AKTYWZACJA SPOŁECZNA I ZAWODOWA OSÓB ZAGROŻONYCH WYKLUCZENIEM SPOŁECZNYM NA TERENIE GMINY NOWE"

Programowanie obiektowe

Programowanie wielowątkowe: podstawowe koncepcje, narzędzia w Javie. J. Starzyński, JiMP2, rok akad. 2005/2006

REGULAMIN SPRZEDAŻY PREMIOWEJ Zarejestruj się na platformie sygmadirect.pl, zbieraj punkty i płać kartą Sygma Bank. 1. Postanowienia ogólne

Organizator badania biegłości ma wdrożony system zarządzania wg normy PN-EN ISO/IEC 17025:2005.

Platformy Programistyczne Podstawy języka Java

Wersja z dn r.

Opis zmian funkcjonalności platformy E-GIODO wprowadzonych w związku z wprowadzeniem możliwości wysyłania wniosków bez podpisu elektronicznego

Strona 1. REGULAMIN OFERTY SPECJALNEJ RACHUNKU OSZCZĘDZAM Zyski dobrze skalkulowane w ramach kont dla osób fizycznych. Słowniczek

Zarządzenie nr 7 Rektora Uniwersytetu Jagiellońskiego z 26 stycznia 2011 roku

Transkrypt:

Wielowątkowość (obsługa wątków) Tworzenie wątków Stany wątków i ich zmiana Demony Grupy wątków Synchronizacja wątków wzajemne wykluczanie oczekiwanie na zmiennych warunkowych pakiet java.util.concurrent 2 Wątek reprezentowany jest w procesie na JVM przez obiekt klasy Thread (w szczególności jej pochodnej). Programem głównym wątku jest metoda run() klasy wywiedzionej z Thread lub dowolnej klasy implementującej interfejs Runnable. Dziedziczenie z klasy Thread definicja klasy pochodnej od Thread, utworzenie obiektu zdefiniowanej klasy. Implementacja interfejsu Runnable definicja klasy implementującej interfejs Runnable, utworzenie obiektu zdefiniowanej klasy, utworzenie obiektu klasy Thread z przekazaniem referencji do utworzonego obiektu klasy implementującej Runnable. 3 4 Dariusz Wawrzyniak 1

Zdefiniowanie klasy MThread wywiedzionej z klasy Thread (implementacja w tej klasie metody run(), która zawiera program wątku) class MThread extends Thread void run()... Utworzenie obiektu th zdefiniowanej klasy MThread MThread th; th = new MThread(); Zdefiniowanie klasy MClass implementującej Runnable oraz implementacja w tej klasie metody run(), która zawiera program wątku class MClass implements Runnable void run()... Utworzenie obiektu obj zdefiniowanej klasy MClass MClass obj = new MClass(); Utworzenie obiektu th klasy Thread Thread th = new Thread(obj); 5 6 public interface Runnable public abstract void run(); private Runnable target; public void run() if (target!= null) target.run(); Referencja target ustawiana jest w konstruktorze, jeśli zostanie przekazany parametr klasy implementującej Runnable. 7 8 Dariusz Wawrzyniak 2

Thread(); Thread(Runnable target); Thread(String name); Thread(Runnable target, String name); wywołanie metody start() exiting wywołanie metody stop() lub zakończenie metody run() 9 10 initial runnable runnable suspended uśpienie jawne lub w wyniku synchron. blocked blocked suspended obudzenie lub przerw. uśpienia wznowienie metoda resume() zawieszenie metoda suspend() void start() uruchomienie wątku, void stop() zakończenie działania wątku, void run() metoda wykonywana przez wątek (główny program wątku), void suspend() zawieszenie wąteku (wątek nie zwalnia blokad), void resume() wznawienie wykonywania zawieszonego wątku, void interrupt() przerwanie oczekiwanie wątku w stanie zablokowania. static void sleep(long milsec [, int nanosec]) uśpienie wątku na podany okres czasu, static void yield() oddanie procesora innemu wątkowi o tym samym priorytecie. Zmiana stanu następuje w wątku wywołującym (wątek wywołuje te metody w celu zmiany własnego stanu) 11 12 Dariusz Wawrzyniak 3

Przerwanie wywołanie metody interrupt() na obiekcie wątku przerywa oczekiwanie wątku w (np. sleep, join, wait) poprzez zgłoszenie wyjątku InterruptedException. Jeśli wątek nie jest w stanie blocked, fakt przerwania jest odnotowywany poprzez ustawienie odpowiedniej flagi (interrupted status). Metoda statyczna Thread.interrupted() zwraca true jeśli flaga jest ustawiona (dla bieżącego wątku) i ją kasuje. Metoda isinterrupted() (na obiekcie wątku) zwraca tę informację dla danego wątku, ale nie kasuje flagi. void setname(string name) przypisanie nazwy do wątku, String getname() odczytanie przypisanej nazwy. Z punktu widzenie systemu nazewnictwo wątków nie ma żadnego znaczenia, jest również raczej mało istotne dla użytkownika. 13 14 void setpriority(int priority) ustawianie priorytetu wątku, int getpriority() odczytanie priorytetu wątku. Stałe (final) w klasie Thread: Thread.MIN_PIORITY Thread.MAX_PIORITY Thread.NORM_PIORITY Większa wartość oznacza wyższy priorytet. void join([long milsec [, int nanosec]]) oczekiwanie na zakończenie wątku (można podać czas oczekiwania), boolean isalive() sprawdzenie, czy wątek działa (zwraca true jeśli wątek został uruchomiony przez start(), ale nie zakończył jeszcze działania wykonywanie metody run() nie dobiegło końca). 15 16 Dariusz Wawrzyniak 4

static Thread currentthread() zwraca obiekt reprezentujący aktualnie wykonywany wątek, static int enumerate(thread threadarray[]) zwraca obiekty reprezentujące wszystkie wątki procesu, static int activecount() zwraca liczbę aktywnych wątków procesu. Demon jest takim wątkiem, który kończy swoje działanie po zakończeniu ostatniego wątku użytkownika. void setdaemon(boolean on) w zależności od wartości parametru on zmienia wątek użytkownika na wątek demon lub odwrotnie, boolean isdaemon() sprawdza, czy wątek jest demonem. 17 18 Łączenie wątków w grupy ma na celu ułatwienie zarządzania zbiorami logicznie powiązanych ze sobą wątków (np. grupa wątków w serwerze do obsługi określonego klienta na połączeniu siec.) Wątek musi zostać przypisany do grupy w momencie tworzenia i pozostaje w niej do końca swego istnienia. Grupy tworzą hierarchię wynikającą z zawierania się jednych grup w innych (każda nowo tworzona grupa jest częścią innej grupy). Thread(ThreadGroup group, Runnable target); Thread(ThreadGroup group, String name); Thread(ThreadGroup group, Runnable target, String name); 19 20 Dariusz Wawrzyniak 5

Grupa wątków reprezentowana jest przez obiekt klasy ThreadGroup. Konstruktory klasy ThreadGroup: ThreadGroup(String name) utworzenie nowej grupy, która jest podgrupą grupy wątku bieżącego, ThreadGroup(ThreadGroup parent, String name) utworzenie nowej grupy, która jest podgrupą grupy wskazanej. void stop() zakończenie działania wszystkich wątków w grupie, void suspend() zawieszenie wszystkich wątków w grupie, void resume() wznawianie wykonywania zawieszonych wszystkich wątków w grupie. 21 22 int enumerate(thread list[]) int enumerate(thread list[], boolean recurse) int activecount() int enumerate(threadgroup list[]) int enumerate(threadgroup list[], boolean recurse) Do usuwania grupy wątków służy metoda destroy(). Metoda destroy() jest skuteczna, jeśli wszystkie wątki w grupie i podgrupach zostały zakończone. Metoda destroy() rekurencyjnie usuwa również wszystkie podgrupy grupy usuwanej. 23 24 Dariusz Wawrzyniak 6

Koordynacja wątków, spójność danych Synchronizacja procesów/wątków koordynacja realizacji poszczególnych instrukcji (kroków, faz) kontrola przepływu sterowania Synchronizacja danych utrzymanie spójności danych gwarancja dostępu do najświeższych wartości zmiennych/stanów obiektów (uwzględnienie wyników ostatnich modyfikacji) 26 Poziom architektury systemu komputorowego zapis/odczyt współdzielonych zmiennych (tzw. współdzielone rejestry) złożone operacje realizowane niepodzielnie, np. test&set, exchange Poziom systemu operacyjnego zarządzanie procesami/wątkami (ich stanem), integracja z mechanizmami przydziału procesora (szeregowania), np. semafory, zamki, zmienne warunkowe Poziom języka programowania strukturalne mechanizmy synchronizacji udostępniające konstrukcje do wyrażania zależności i ograniczeń w dostępie do współdzielonych zasobów (monitory, regiony krytyczne) Mechanizmy niskopoziomowe Wzajemne wykluczanie blok/metoda Oczekiwanie na spełnienie warunku wait(), notify(), notifyall() Blok oraz metody wait(), notify() i notifyall() mogą być realizowane na dowolnym obiekcie (obiekcie klasy Object). Mechanizmy wysokopoziomowe pakiet java.util.concurrent (od wersji 1.5) Atomowe operacja na obiektach Zamki (Lock) i zmienne warunkowe (Condition) Semafory (Semaphore), bariery (CyclicBarrier) itp. Współbieżnie dostępne kolekcje (ConcurrentHashMap, ConcurrentLinkedQueue, CopyOnWriteArrayList, CopyOnWriteArraySet) 28 Dariusz Wawrzyniak 7

Blok na danym obiekcie zajmuje zamek związany (integralnie) z tym obiektem (obj)... Metoda typu zajmuje zamek związany z obiektem, dla którego jest wywoływana, będzie zatem wykluczać wykonanie innych metod typu lub bloków na tym obiekcie. 29 public class Konto private float kwota; public boolean wyplata(float k) if (k <= kwota) kwota -= k; return true; return false; public void wplata (float k) kwota += k; 30 Jeśli tylko fragment kodu metody ma się wykluczać z innymi metodami typu, można to osiągnąć przez utworzenie bloku na referencji this w implementacji tej metody.... (this)... Co się stanie, jeśli metoda typu zostanie wywołana z innej metody typu (czyli przez ten sam wątek)? Czy nastąpi zakleszczenie, a jeśli nie, to czy nie nastąpi przedwczesne zwolnienie blokady obiektu? 31 32 Dariusz Wawrzyniak 8

method_a() method_b(); zamek zintegrowany z obiektem jest wielowejściowy ponowne założenie zamka na tym samym obiekcie zakleszczenie? method_b() przedwczesne zwolnienie zamka? method() b.method(); (ang. reentrant) 33 34 obiekt a wątek A zajęty zamek zajęty zamek ZAKLESZCZENIE!!! wątek B method() a.method(); obiekt b void wait([long milsec [, int nanosec]]) czeka na spełnienie warunku (na sygnał wysyłany przez notify() lub notifyall()), void notify() wysyła sygnał do wątku oczekującego po wywołaniu metody wait() danego obiektu, void notifyall() wysyła sygnał do wszystkich wątków oczekujących po wywołaniu metody wait(), Metody wait(), notify() i notifyall() muszą być wywoływane w bloku (metodzie) na tym samym obiekcie, w przeciwnym przypadku zgłaszany jest wyjątek NotOwnerException. wątek A sygnał ignorowany (obj) 35 36 obj.wait(); sygnał budzący wątek B (obj) obj.notify(); (obj) obj.notify(); Dariusz Wawrzyniak 9

wątek A wątek B Czy przy pomocy mechanizmów synchronizacji w Java ie da się zbudować monitor? czy warunek spełniony? wait() zmiana stanu (modyfikacja zmiennych/ obiektów) notify() 37 38 Atomowe zmienne: AtomicBoolean, AtomicInteger, AtomicLong, AtomicReference Operacje (atomowe) na zmiennej atomowej: addandget, getandadd, compareandset, decrementandget, getanddecrement, incrementandget, getandincrement 39 Dariusz Wawrzyniak 10