Kurs programowania. Wykład 8. Wojciech Macyna

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

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

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

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

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

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

Język Java wątki (streszczenie)

Wątki w Javie. Piotr Tokarski

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

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

Współbieżność w Javie

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

Język Java wątki (streszczenie)

Współbieżność w Javie

Programowanie wielowątkowe. Tomasz Borzyszkowski

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

Programowanie komputerów

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

Podstawy współbieżności

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

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

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

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

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

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

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

Programowanie współbieżne Laboratorium nr 11

Java. Programowanie Obiektowe Mateusz Cicheński

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

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

Równolegªo± w Javie w tki.

Systemy Rozproszone - Ćwiczenie 4

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

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

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

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

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

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

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

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

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

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

Zaawansowane programowanie w C++ (PCP)

Wykład 6: Dziedziczenie

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

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

Aplikacje w środowisku Java

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

Programowanie współbieżne i rozproszone

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

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

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

JAVA W SUPER EXPRESOWEJ PIGUŁCE

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

1 Atrybuty i metody klasowe

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

Kurs języka Python. Wątki

Aplikacje RMI Lab4

Programowanie obiektowe

Programowanie i projektowanie obiektowe

1. Co będzie wynikiem wykonania poniŝszych instrukcji? g2d.gettransform().scale(1, -1); g2d.gettransform().translate(4, -8); g2d.drawline(4, 0, 4, 4);

Enkapsulacja, dziedziczenie, polimorfizm

1. Co można powiedzieć o poniższym kodzie? public interface I { void m1() {}; static public void m2() {}; void abstract m3();

Programowanie obiektowe

Zaawansowany kurs języka Python

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

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

Przykłady interfejsu TCP i UDP w Javie

Instrukcja implementacji sterownika wirtualnego portu szeregowego dla systemu Android. Opracowanie: Elzab Soft sp. z o.o.

Aplikacja wielowątkowa prosty komunikator

Programowanie obiektowe

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

Podstawy programowania w lejos

Java SE, Laboratorium nr 8 Wątki

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

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

Wykład 8: Obsługa Wyjątków

Programowanie współbieżne Laboratorium nr 12

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

Generatory. Michał R. Przybyłek

1. Co można powiedzieć o poniższym kodzie?

Wstęp do Java. Operacje Wejścia-Wyjścia Programowanie Wielowątkowe. dr Krzysztof Podlaski. Wydział Fizyki i Informatyki Stosowanej

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

Multimedia JAVA. Historia

Kurs rozszerzony języka Python

Klasy abstrakcyjne i interfejsy

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

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Programowanie obiektowe

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

Projektowanie aplikacji internetowych laboratorium

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

Programowanie wielowątkowe. Jarosław Kuchta

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.

Wielozadaniowość w systemie Microsoft Windows

Wyjątki. Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut.

Wykład 5 Okna MDI i SDI, dziedziczenie

Dokumentacja do API Javy.

dr Krzysztof Podlaski

Wykład 7: Pakiety i Interfejsy

Transkrypt:

Wykład 8

Program bez watków, jeden procesor, trzy zadania Program z watkami, jeden procesor, trzy zadania Procesory wielordzeniowe, każde zadanie na osobnym procesorze Trzy zadania uruchomione w watkach na dwóch procesorach

Watki Problem: Wspólne dane Watki korzystaja z tych samych danych. Mówi się, że watki współdziela przestrzeń adresowa. Oznacza to tyle, że obiekty dostępne dla jednego watku sa widoczne także w innych watkach Klasa Thread jest klasa bazowa watków. Jej konstruktor jako argument przyjmuje klasę z zaimplementowanym interfejsem Runnable a uruchamia watek metoda start() która wywołuje metodę run(). Watki moga też być definiowane jako pochodne klasy Thread.

Definiowanie watków Dziedziczenie po Thread 1 public class MyThread extends Thread { 2 @Override 3 public void run () { 4 System. out. println ( " I 'm inside thread! " ); 5 } 6 } 7 Thread thread = new MyThread (); Implementacja Runnable 1 public static class MyRunnable implements Runnable { 2 @Override 3 public void run () { 4 System. out. println ( " I 'm inside runnable! " ); 5 } 6 } 7 Thread thread = new Thread ( new MyRunnable ());

Diagram stanów watków Stany watku NEW nowy watek, który nie został jeszcze uruchomiony, RUNNABLE watek, który może wykonywać swój kod, TERMINATED watek, który zakończył swoje działanie, BLOCKED watek zablokowany, oczekujacy na zwolnienie współdzielonego zasobu, WAITING watek uśpiony, TIMEDWAITING watek uśpiony na określony czas.

Przykład RunnableDemo.java 1 class D i s p l a y M e s s a g e implements Runnable { 2 private String message ; 3 public DisplayMessage ( String message ) { 4 this. message = message ; } 5 public void run () { 6 while ( true ) System. out. println ( message ); } 7 } 8 public class R u n n a b l e D e m o { 9 public static void main ( String [] args ) { 10 System. out. println ( " Creating the hello thread... " ); 11 DisplayMessage hello = new DisplayMessage ( " Hello " ); 12 Thread thread1 = new Thread ( hello ); 13 System. out. println ( " Starting the hello thread... " ); 14 thread1. start (); 15 System. out. println ( " Creating the goodbye thread... " ); 16 DisplayMessage bye = new DisplayMessage ( " Goodbye " ); 17 Thread thread2 = new Thread ( bye ); 18 System. out. println ( " Starting the goodbye thread... " ); 19 thread2. start (); 20 } 21 }

Klasa Thread Usypianie watku Thread.sleep(int ms) Zawieszenie wykonywania watku. Metoda wywołuje wyjatek InterruptedException i musi być umieszczona w środowisku try. Próba przełaczenia watku Thread.yield() Sugerowanie zarzadcy watków, że w tym momencie można przełaczyć sterowanie na inny watek (o tym samym priorytecie).

Klasa Thread Priorytet watku getpriority() i setpriority(int) Watki moga mieć ustawione priorytety pomiędzy Thread.MIN_PRIORITY a Thread.MAX_PRIORITY. Watki o wyższym priorytecie sa wykonywane w pierwszej kolejności co może spowodować, ze watki o niższym priorytecie nie będa wykonywane. Watki sa startowane z domyślnym priorytetem: Thread.NORM_PRIORITY. Watki-demony setdaemon() Demon to watek który działa w tle programu. Program nie czeka np. z zakończeniem działania na watki które sa demonami. Ustawienie watku jako demona musi się odbyć przed jego uruchomieniem.

Klasa Thread Łaczenie watków join() Czeka aż zakończy się wykonywanie watku. Dopiero potem rozpoczynaja swoje działanie następne watki. Nadawanie nazwy setname(string name) Nadanie nazwy która jest między innymi wyświetlana przez metodę tostring() obiektu.

Współdzielenie zasobów Watki z punktu widzenia programu sa wykonywane niezależnie i nie wiadomo w jakiej kolejności zostana wywołane. Stad przy korzystaniu ze wspólnych zasobów musimy zapewnić im pewna synchronizację i zapobiec kolizjom. JAVA ma wbudowany mechanizm zapobiegajacy takim sytuacjom. Słowo kluczowe synchronized Za pomoca tego słowa oznaczamy metodę która nie powinna być przerwana ze względu na możliwość kolizji. Metoda ta zawsze będzie wykonywana w całości bez względu na możliwość przejścia na inny watek. Środowisko synchronized(object){...} Powiazanie nieprzerywalnego ciagu komend z obiektem który jest traktowany jako semafor.

Współdziałanie watków Metody wait() i notifyall() Metoda sleep() nie zwalnia blokad. Metoda wait(int ms) zawiesza wykonywanie watku na ms milisekund i zwalnia blokady. Jej działanie kończy się w wyniku upłynięcia czasu, albo wywołania metod notify() lub notifyall(). notify() budzi pierwszy pierwszy watek który wywołał wait().notifyall() budzi wszystkie watki, które wywołały wait(). Będzie działał ten o najwyższym priorytecie. Dla wait() bez argumentów nie ma warunku czasowego. Zakleszczenie Niewłaściwe stosowanie metody wait() przez różne watki może doprowadzić do zakleszczenia, czyli blokady.

Przykład SynchronizedDemo1.java brak synchronizacji SynchronizedDemo2.java zastosowanie metody synchronized SynchronizedDemo3.java zastosowanie metody synchronized oraz wait() i notifyall() SynchronizedDemo4.java zastosowanie metody synchronized oraz wait() i notify() SynchronizedDemo5.java zastosowanie środowiska synchronized SynchronizedDemo6.java przykład zakleszczenia