Wątki w Javie. Piotr Tokarski

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

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

Język Java wątki (streszczenie)

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

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

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

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

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

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

Współbieżność w Javie

Język Java wątki (streszczenie)

Kurs programowania. Wykład 8. Wojciech Macyna

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

Współbieżność w Javie

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

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

Programowanie wielowątkowe. Tomasz Borzyszkowski

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

Programowanie komputerów

Podstawy współbieżności

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

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

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.

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

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

Java. Programowanie Obiektowe Mateusz Cicheński

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

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

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 współbieżne Laboratorium nr 12

Marcin Luckner Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych

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

WIELOWĄTKOWOŚĆ. Waldemar Korłub. Platformy Technologiczne KASK ETI Politechnika Gdańska

Programowanie współbieżne Laboratorium nr 11

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

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

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

Programowanie współbieżne i rozproszone

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

Multimedia JAVA. Historia

Wykład 6: Dziedziczenie

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

Język Java część 2 (przykładowa aplikacja)

1 Atrybuty i metody klasowe

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

Programowanie sieciowe

Zadanie polega na stworzeniu bazy danych w pamięci zapewniającej efektywny dostęp do danych baza osób.

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

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

Model pamięci. Rafał Skinderowicz

Klasy abstrakcyjne, interfejsy i polimorfizm

Programowanie Obiektowe Java

Platformy Programistyczne Zagadnienia sieciowe i wątki

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

Programowanie obiektowe

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

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

Monitory. Jarosław Kuchta

akademia androida Service, BroadcastReceiver, ContentProvider część IV

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

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

Zadanie 2: transakcyjny protokół SKJ (2015)

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

Język JAVA podstawy. Wykład 4, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

1. Co można powiedzieć o poniższym kodzie (zakładając, że znajduje się on w jednym pliku A.java)?

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

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

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

Zad.30. Czy można utworzyć klasę, która implementuje oba interfejsy?

Język Java część 2 (przykładowa aplikacja)

Enkapsulacja, dziedziczenie, polimorfizm

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

Języki programowania imperatywnego

Java niezbędnik programisty spotkanie nr 3. Modyfikatory, jednostki kompilacji, tworzenie/inicjalizacja, odśmiecanie/ finalizacja...

Dziedziczenie. dr Jarosław Skaruz

Systemy Rozproszone - Ćwiczenie 4

Przykłady interfejsu TCP i UDP w Javie

PWSG Ćwiczenia 12. Wszystkie ukończone zadania należy wysłać na adres: lub

Kurs języka Python. Wątki

Programowanie obiektowe

Testowanie II. Cel zajęć. Pokrycie kodu

Generatory. Michał R. Przybyłek

Operatory. Składnia. Typy proste. Znaki specjalne

Dokumentacja do API Javy.

Java Podstawy. Michał Bereta

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

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

Wykład 7: Pakiety i Interfejsy

Java SE, Laboratorium nr 8 Wątki

Wyjątki Monika Wrzosek (IM UG) Programowanie obiektowe 180 / 196

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

Aplikacje RMI Lab4

Klasy i obiekty cz I Klasy, obiekty, podstawy używania obiektów

Zaawansowany kurs języka Python

Aplikacje w środowisku Java

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

Java: otwórz okienko. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Polimorfizm. dr Jarosław Skaruz

Programowanie obiektowe w języku

Transkrypt:

Wątki w Javie Piotr Tokarski

Wprowadzenie

Co to są wątki?

Co to są wątki? Każdy program ma przynajmniej jeden wątek

Co to są wątki? Każdy program ma przynajmniej jeden wątek Wątki są po to, by symulować równoległe wykonywanie czynności

Co to są wątki? Każdy program ma przynajmniej jeden wątek Wątki są po to, by symulować równoległe wykonywanie czynności Nikt nie może przewidzieć jaka będzie kolejność przydzielania procesora poszczególnym wątkom

Co to są wątki? Każdy program ma przynajmniej jeden wątek Wątki są po to, by symulować równoległe wykonywanie czynności Nikt nie może przewidzieć jaka będzie kolejność przydzielania procesora poszczególnym wątkom Wątki to bardzo rozległy i problematyczny temat

Wątki w Javie

Wątki w Javie Komponenty wspierające wielowątkowość znajdują się w pakiecie java.lang

Wątki w Javie Komponenty wspierające wielowątkowość znajdują się w pakiecie java.lang Kluczowa klasa to java.lang.thread

Wątki w Javie Komponenty wspierające wielowątkowość znajdują się w pakiecie java.lang Kluczowa klasa to java.lang.thread Istotną rolę w działaniach wielowątkowych odgrywa interfejs java.lang.runnable

Wątki w Javie Komponenty wspierające wielowątkowość znajdują się w pakiecie java.lang Kluczowa klasa to java.lang.thread Istotną rolę w działaniach wielowątkowych odgrywa interfejs java.lang.runnable Każdy obiekt posiada zbiór metod wspierających wielowątkowość

Kluczowe sterowanie class Object class Thread interface Runnable wait start run notify join notifyall yield sleep

Kluczowe sterowanie class Object class Thread interface Runnable wait start run notify join notifyall yield sleep Metody zaznaczone kursywą to metody statyczne

Kluczowe sterowanie class Object class Thread interface Runnable wait start run notify join notifyall yield sleep Metody zaznaczone kursywą to metody statyczne Każdy wątek jest również java.lang.runnable

Uruchamianie wątków

Uruchamianie wątków Sposób I

Uruchamianie wątków Sposób I Zostaje stworzona klasa dziedzicząca po klasie java.lang.thread i przeciążająca metodę public void run()

Uruchamianie wątków Sposób I Zostaje stworzona klasa dziedzicząca po klasie java.lang.thread i przeciążająca metodę public void run() Zostaje stworzony obiekt klasy dziedziczącej z java.lang.thread

Uruchamianie wątków Sposób I Zostaje stworzona klasa dziedzicząca po klasie java.lang.thread i przeciążająca metodę public void run() Zostaje stworzony obiekt klasy dziedziczącej z java.lang.thread Zostaje uruchomiona metoda public synchronized void start()

Uruchamianie wątków Sposób I DEMO

Uruchamianie wątków Sposób II

Uruchamianie wątków Sposób II Zostaje stworzona klasa implementująca interfejs java.lang.runnable (metodę void run())

Uruchamianie wątków Sposób II Zostaje stworzona klasa implementująca interfejs java.lang.runnable (metodę void run()) Zostaje stworzony obiekt klasy implementującej java.lang.runnable

Uruchamianie wątków Sposób II Zostaje stworzona klasa implementująca interfejs java.lang.runnable (metodę void run()) Zostaje stworzony obiekt klasy implementującej java.lang.runnable Zostaje stworzony obiekt klasy java.lang.thread, której konstruktor przyjmuje obiekt klasy implementującej java.lang.runnable

Uruchamianie wątków Sposób II Zostaje stworzona klasa implementująca interfejs java.lang.runnable (metodę void run()) Zostaje stworzony obiekt klasy implementującej java.lang.runnable Zostaje stworzony obiekt klasy java.lang.thread, której konstruktor przyjmuje obiekt klasy implementującej java.lang.runnable Zostaje uruchomiona metoda public synchronized void start()

Uruchamianie wątków Sposób II DEMO

Uruchamianie wątków

Uruchamianie wątków Zobaczmy dlaczego oba sposoby są możliwe

Uruchamianie wątków Zobaczmy dlaczego oba sposoby są możliwe Mimo, że oba sposoby działają tak samo, pierwszy sposób jest uważany za przestarzały i sugerowane jest używanie sposobu drugiego (z jawną implementacją interfejsu java.lang.runnable)

Uruchamianie wątków UWAGA!!! Jawne uruchomienie metody void run() NIE TWORZY nowego wątku

Uruchamianie wątków UWAGA!!! Jawne uruchomienie metody void run() NIE TWORZY nowego wątku Wywołanie metody public synchronized void start() uruchamia metodę void run() w nowo utworzonym wątku

Uruchamianie wątków UWAGA!!! Na każdym obiekcie typu java.lang.thread metoda public synchronized void start() może być uruchomiona TYLKO RAZ

Uruchamianie wątków UWAGA!!! Na każdym obiekcie typu java.lang.thread metoda public synchronized void start() może być uruchomiona TYLKO RAZ Każde kolejne wywołanie metody public synchronized void start() na tym samym obiekcie klasy java.lang.thread spowoduje rzucenie wyjątku typu java.lang.illegalthreadstateexception

Kluczowe sterowanie class Object class Thread interface Runnable wait start run notify join notifyall yield sleep

Głodzenie wątków

Głodzenie wątków

Głodzenie wątków Głodzenie jest naszym celem, gdy chcemy wymusić wykonywanie w danym momencie określonych wątków, a inne zatrzymać

Głodzenie wątków Sposób I

Głodzenie wątków Sposób I public static native void sleep(long millis) throws InterruptedException

Głodzenie wątków Sposób I public static native void sleep(long millis) throws InterruptedException Najprostszy sposób

Głodzenie wątków Sposób I public static native void sleep(long millis) throws InterruptedException Najprostszy sposób AKTUALNY wątek zostaje uśpiony na konkretny, wskazany okres czasu

Głodzenie wątków Sposób I public static native void sleep(long millis) throws InterruptedException Najprostszy sposób AKTUALNY wątek zostaje uśpiony na konkretny, wskazany czas Istnieje przeładowanie metody: public static void sleep(long millis, int nanos) throws InterruptedException

Głodzenie wątków Sposób II

Głodzenie wątków Sposób II public static native void yield()

Głodzenie wątków Sposób II public static native void yield() Yield ustąpić

Głodzenie wątków Sposób II public static native void yield() Yield ustąpić AKTUALNY wątek ustępuje sterowania pozostałym

Głodzenie wątków Sposób II public static native void yield() Yield ustąpić AKTUALNY wątek ustępuje sterowania pozostałym Komenda jest tylko prośbą do procesora

Głodzenie wątków Sposób III

Głodzenie wątków Sposób III public final void join()

Głodzenie wątków Sposób III public final void join() Aktualny wątek oczekuje aż wątek, na którym została uruchomiona metoda zakończy swoją pracę i dołączy do aktualnego wątku

Głodzenie wątków Sposób III public final void join() Aktualny wątek oczekuje aż wątek, na którym została uruchomiona metoda zakończy swoją pracę i dołączy do aktualnego wątku Istnieją przeładowania metody: public final synchronized void join(long millis) public final synchronized void join(long millis, int nanos)

Kluczowe sterowanie class Object class Thread interface Runnable wait start run notify join notifyall yield sleep

Głodzenie wątków Sposób IV

Głodzenie wątków Sposób IV Słowo kluczowe synchronized

Głodzenie wątków Sposób IV Słowo kluczowe synchronized Blok/metoda zaczyna być traktowana jako jednostkowa operacja procesora

Głodzenie wątków Sposób IV Słowo kluczowe synchronized Blok/metoda zaczyna być traktowana jako jednostkowa operacja procesora UWAGA!!! Nieumiejętne używanie bloków synchronicznych może doprowadzić do tzw. deadlock-ów

Głodzenie wątków Sposób IV Kod synchroniczny można odblokować metodą obiektu public final void wait()

Głodzenie wątków Sposób IV Kod synchroniczny można odblokować metodą obiektu public final void wait() Aby ponownie ustawić blokadę należy skorzystać z metody public final native void notify()

Głodzenie wątków Sposób IV Kod synchroniczny można odblokować metodą obiektu public final void wait() Aby ponownie ustawić blokadę należy skorzystać z metody public final native void notify() public final native void notifyall() informuje wszystkie oczekujące wątki

Głodzenie wątków Sposób IV Kod synchroniczny można odblokować metodą obiektu public final void wait() Aby ponownie ustawić blokadę należy skorzystać z metody public final native void notify() public final native void notifyall() informuje wszystkie oczekujące wątki Metoda wait mają następujące przeładowania: public final native void wait(long timeout) throws InterruptedException public final void wait(long timeout, int nanos) throws InterruptedException

Kluczowe sterowanie class Object class Thread interface Runnable wait start run notify join notifyall yield sleep

Dziękuję za uwagę