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

Podobne dokumenty
Kurs programowania. Wykład 8. Wojciech Macyna

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

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

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

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

Język Java wątki (streszczenie)

Współbieżność w Javie

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

Współbieżność w Javie

Język Java wątki (streszczenie)

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

Wątki w Javie. Piotr Tokarski

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

Programowanie komputerów

Podstawy współbieżności

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

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

Systemy Rozproszone - Ćwiczenie 4

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

Java. Programowanie Obiektowe Mateusz Cicheński

Programowanie wielowątkowe. Tomasz Borzyszkowski

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

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

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

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

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

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

Równolegªo± w Javie w tki.

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.

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

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

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

Programowanie współbieżne Laboratorium nr 11

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

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

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

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

Języki i metody programowania Java. Wykład 2 (część 2)

Przykłady interfejsu TCP i UDP w Javie

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

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

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

Wykład 6: Dziedziczenie

Programowanie współbieżne i rozproszone

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

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

Aplikacja wielowątkowa prosty komunikator

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

Aplikacje w środowisku Java

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);

1 Atrybuty i metody klasowe

Java SE, Laboratorium nr 8 Wątki

Multimedia JAVA. Historia

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

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

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.

Kurs programowania. Wykład 6. Wojciech Macyna. 7 kwietnia 2016

Programowanie obiektowe

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

Aplikacje RMI Lab4

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

Wykład 4 Delegat (delegate), właściwości indeksowane, zdarzenie (event) Zofia Kruczkiewicz

JAVA W SUPER EXPRESOWEJ PIGUŁCE

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

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

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

Programowanie współbieżne Laboratorium nr 12

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

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

Enkapsulacja, dziedziczenie, polimorfizm

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

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

Platformy Programistyczne Zagadnienia sieciowe i wątki

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

Projektowanie aplikacji internetowych laboratorium

Programowanie i projektowanie obiektowe

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

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

Rozdział 4 Programowanie współbieżne wątki

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

Zaawansowany kurs języka Python

Aplikacja wielow tkowa prosty komunikator

Generatory. Michał R. Przybyłek

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

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

Dokumentacja do API Javy.

Podstawy programowania w lejos

Systemy Rozproszone - Ćwiczenie 6

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Kurs rozszerzony języka Python

Systemy operacyjne. Zajęcia 11. Monitory

Operatory. Składnia. Typy proste. Znaki specjalne

Programowanie obiektowe

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

Transkrypt:

Wykład 8 10 maj 2017

Współbieżność Watki w JAVA-ie Współbieżność może być realizowana na poziomie systemu operacyjnego (procesy) lub na poziomie aplikacji (watki). W JAVA-ie powszechnie stosuje się watki. Na watkach zbudowana jest większość aplikacji w tym GUI. Definiowanie zadania Watek wykonuje pewne zadanie - aby je zdefiniować trzeba zaimplementować interfejs Runnable z metoda run() oraz skojarzyć to zadanie z określonym watkiem.

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 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. 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.

Przykład - ThreadDemo.java 1 class G u e s s A N u m b e r extends Thread { 2 private int number ; 3 public GuessANumber ( int number ) { this. number = number ; } 4 public void run () { 5 int counter = 0; 6 int guess = 0; 7 do { 8 Thread. yield (); 9 guess = ( int ) ( Math. random () * 1000000 + 1); 10 counter ++; } 11 while ( guess!= number ); 12 System. out. println ( " ** Correct! " + this. getname ()+ 13 " in " + counter + " guesses.** " ); 14 } 15 } 16 public class ThreadDemo { 17 public static void main ( String [] args ) { 18 G u e s s A N u m b e r player1 = new G u e s s A N u m b e r (20); 19 G u e s s A N u m b e r player2 = new G u e s s A N u m b e r (20); 20 G u e s s A N u m b e r player3 = new G u e s s A N u m b e r (20); 21 player1. start (); player2. start (); player3. start (); 22 } 23 }

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