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



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

Współbieżność w Javie

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

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

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

Kurs programowania. Wykład 8. Wojciech Macyna

Język Java wątki (streszczenie)

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

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

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

Język Java wątki (streszczenie)

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

Programowanie komputerów

Programowanie wielowątkowe. Tomasz Borzyszkowski

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

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

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

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

Podstawy współbieżności

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

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

Programowanie równoległe i rozproszone. Monitory i zmienne warunku. Krzysztof Banaś Programowanie równoległe i rozproszone 1

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

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

Stworzenie klasy nie jest równoznaczne z wykorzystaniem wielowątkowości. Uzyskuje się ją dopiero poprzez inicjalizację wątku.

Java: interfejsy i klasy wewnętrzne

Wywoływanie metod zdalnych

Równolegªo± w Javie w tki.

Programowanie współbieżne Laboratorium nr 11

Multimedia JAVA. Historia

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

4.1 Napisz kod, w którym definiujesz, tworzysz oraz uruchamiasz wątki z uŝyciem klas java.lang.thread oraz java.lang.runnable.

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

Programowanie współbieżne i rozproszone

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

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

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Wykład 6: Dziedziczenie

Podejście obiektowe do budowy systemów rozproszonych

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

Wywoływanie metod zdalnych

Monitory. Jarosław Kuchta

W Javie wątki są obiektami zdefiniowanymi za pomocą specjalnego rodzaju klas.

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

Podejście obiektowe do budowy systemów rozproszonych

1 Atrybuty i metody klasowe

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

Remote Method Invocation 17 listopada 2010

Remote Method Invocation 17 listopada Dariusz Wawrzyniak (IIPP) 1

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Semafor nie jest mechanizmem strukturalnym. Aplikacje pisane z użyciem semaforów są podatne na błędy. Np. brak operacji sem_post blokuje aplikację.

Programowanie obiektowe

Programowanie współbieżne Wykład 2. Rafał Skinderowicz

Dokumentacja do API Javy.

Platformy Programistyczne Podstawy języka Java

Wykład 5. Synchronizacja (część II) Wojciech Kwedlo, Wykład z Systemów Operacyjnych -1- Wydział Informatyki PB

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

Programowanie obiektowe

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Obiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1

PHP 5 język obiektowy

Java. Programowanie Obiektowe Mateusz Cicheński

Kurs WWW. Paweł Rajba.

Systemy Rozproszone - Ćwiczenie 4

KLASY, INTERFEJSY, ITP

Enkapsulacja, dziedziczenie, polimorfizm

1. Co można powiedzieć o poniższym kodzie (zakładając, że zaimportowano wszystkie niezbędne klasy)?

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

WSNHiD, Programowanie 2 Lab. 2 Język Java struktura programu, dziedziczenie, abstrakcja, polimorfizm, interfejsy

Aplikacje Internetowe. Najprostsza aplikacja. Komponenty Javy. Podstawy języka Java

Java podstawy jęyka. Wykład 2. Klasy abstrakcyjne, Interfejsy, Klasy wewnętrzne, Anonimowe klasy wewnętrzne.

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

Generatory. Michał R. Przybyłek

Interfejsy i klasy wewnętrzne

Programowanie w Sieci Internet. Python: Wątki. Kraków, 12 grudnia 2014 r. mgr Piotr Rytko Wydział Matematyki i Informatyki

Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017

Klasy abstrakcyjne, interfejsy i polimorfizm

Platformy Programistyczne Zagadnienia sieciowe i wątki

Polimorfizm. dr Jarosław Skaruz

7 Pewne uzupełnienia Przepływ sterowania Układacze... 6

Operatory. Składnia. Typy proste. Znaki specjalne

Interfejsy w Java. Przetwarzanie równoległe. Wątki.

Semafor nie jest mechanizmem strukturalnym. Aplikacje pisane z użyciem semaforów są podatne na błędy. Np. brak operacji sem_post blokuje aplikację.

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

Programowanie obiektowe

Programowanie współbieżne Laboratorium nr 12

Programowanie obiektowe

Programowanie współbieżne Wykład 5. Rafał Skinderowicz

Aplikacje RMI

Klasy. dr Anna Łazińska, WMiI UŁ Podstawy języka Java 1 / 13

Singleton. Cel: Przykład: Zastosowanie: Zapewnienie, że klasa ma tylko jedną instancję i dostarczenie globalnego dostępu do niej.

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019

Aplikacje RMI Lab4

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Dziedziczenie. Tomasz Borzyszkowski

Wielowątkowość 1. Marcin Orchel. AGH University of Science and Technology in Poland 1 / 58

Transkrypt:

Współbieżność w środowisku Java Wątki i ich synchronizacja Zagadnienia Tworzenie wątków Stany wątków i ich zmiana Demony Synchronizacja wątków wzajemne wykluczanie oczekiwanie na zmiennych warunkowych Grupy wątków SKiSR Współbieżność w środowisku Java 2

Klasa java.lang.thread Interfejs java.lang.runnable 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. SKiSR Współbieżność w środowisku Java 3 Tworzenie wątków 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. SKiSR Współbieżność w środowisku Java 4

Tworzenie wątków poprzez dziedziczenie z klasy Thread 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(); SKiSR Współbieżność w środowisku Java 5 Tworzenie wątków poprzez implement. interfejsu Runnable 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); SKiSR Współbieżność w środowisku Java 6

Definicja interfejsu Runnable public interface Runnable { public abstract void run(); SKiSR Współbieżność w środowisku Java 7 Implementacja metody run() w klasie Thread 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. SKiSR Współbieżność w środowisku Java 8

Konstruktory klasy Thread Thread(); Thread(Runnable target); Thread(String name); Thread(Runnable target, String name); SKiSR Współbieżność w środowisku Java 9 wywołanie metody start() exiting wywołanie metody stop() lub zakończenie metody run() initial runnable runnable suspended Stany wątku uśpienie jawne lub w wyniku synchron. obudzenie lub przerw. uśpienia blocked blocked suspended wznowienie metoda resume() zawieszenie metoda suspend() SKiSR Współbieżność w środowisku Java 10

Klasa Thread zmiana stanu wątków void start() uruchomienie wąteku, 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. SKiSR Współbieżność w środowisku Java 11 Klasa Thread zmiana stanu wątków (metody statyczne) 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łuję te metody w celu zmiany własnego stanu) SKiSR Współbieżność w środowisku Java 12

Klasa Thread nadawanie nazw wątkom 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. SKiSR Współbieżność w środowisku Java 13 Klasa Thread priorytety wątków 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. SKiSR Współbieżność w środowisku Java 14

Klasa Thread inne metody void join([long milsec [, int nanosec]]) oczekiwanie na zakończenia 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). SKiSR Współbieżność w środowisku Java 15 Klasa Thread inne metody statyczne 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. SKiSR Współbieżność w środowisku Java 16

Demony 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. SKiSR Współbieżność w środowisku Java 17 Synchronizacja wątków Wzajemne wykluczanie metoda synchronized, blok synchronized. Oczekiwanie na spełnienie warunku blokowanie wait(), budzenie notify(), notifyall(). Blok synchronized oraz metody wait(), notify() i notifyall() mogą być realizowane na dowolnym obiekcie (obiekcie klasy Object). SKiSR Współbieżność w środowisku Java 18

Metoda/blok synchronized Blok synchronized na danym obiekcie zajmuje zamek związany z tym obiektem synchronized (obj){... Metoda typu synchronized zajmuje zamek związany z obiektem, dla którego jest wywoływana, będzie zatem wykluczać wykonanie innych metod typu synchronized lub bloków synchronized na tym obiekcie. SKiSR Współbieżność w środowisku Java 19 Przykład metod synchronized public class Konto { private float kwota; public synchronized boolean wyplata(float k) { if (k <= kwota) { kwota -= k; return true; return false; public synchronized void wplata (float k) { kwota += k; SKiSR Współbieżność w środowisku Java 20

Wzajemne wykluczanie fragmentu kodu metody Jeśli tylko fragment kodu metody ma się wykluczać z innymi metodami typu synchronized, można to osiągnąć przez utworzenie bloku synchronized na referencji this w implementacji tej metody. {... synchronized (this) {... SKiSR Współbieżność w środowisku Java 21 Pytanie Co się stanie, jeśli metoda typu synchronized zostanie wywołana z innej metody typu synchronized (czyli przez ten sam wątek)? Czy nastąpi zakleszczenie, a jeśli nie, to czy nie nastąpi przedwczesne zwolnienie blokady obiektu? SKiSR Współbieżność w środowisku Java 22

Przykład zagnieżdżonych blokad synchronized method_a(){ ponowne założenie zamka na tym samym obiekcie deadlock? method_b(); synchronized method_b(){ przedwczesne zdjęcie zamka z obiektu? SKiSR Współbieżność w środowisku Java 23 Oczekiwanie na spełnienie warunku 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() i notify() (notifyall()) muszą być wywoływane w bloku (metodzie) synchronized na tym samym obiekcie. SKiSR Współbieżność w środowisku Java 24

Budzenie wątków oczekujących na spełnienie warunku wątek A sygnał jest ignorowany wątek B synchronized (object){ object.notify(); synchronized (object){ object.wait(); synchronized (object){ object.notify(); sygnał budzi wątek SKiSR Współbieżność w środowisku Java 25 Schemat synchronizacji na zmiennych warunkowych wątek A wątek B synchronized czy warunek spełniony? NIE wait(); // zmiana // wartości // zmiennych notify(); synchronized SKiSR Współbieżność w środowisku Java 26

Pytanie Czy przy pomocy mechanizmów synchronizacji w Java ie da się zbudować monitor? SKiSR Współbieżność w środowisku Java 27 Grupowanie wątków Łą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). SKiSR Współbieżność w środowisku Java 28

Konstruktory klasy Thread z uwzględnieniem grupowania Thread(ThreadGroup group, Runnable target); Thread(ThreadGroup group, String name); Thread(ThreadGroup group, Runnable target, String name); SKiSR Współbieżność w środowisku Java 29 Tworzenie grupy wątków 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. SKiSR Współbieżność w środowisku Java 30

Operowanie na grupach wątków 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. SKiSR Współbieżność w środowisku Java 31 Wyliczanie wątków w grupie int enumerate(thread list[]) int enumerate(thread list[], boolean recurse) int activecount() int enumerate(threadgroup list[]) int enumerate(threadgroup list[], boolean recurse) SKiSR Współbieżność w środowisku Java 32

Usuwanie grupy wątków 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. SKiSR Współbieżność w środowisku Java 33