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



Podobne dokumenty
Podstawy współbieżności

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

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

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

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

Język Java wątki (streszczenie)

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

Kurs programowania. Wykład 8. Wojciech Macyna

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

Język Java wątki (streszczenie)

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

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

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

Wątki w Javie. Piotr Tokarski

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

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

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

Java. Programowanie Obiektowe Mateusz Cicheński

Programowanie komputerów

Aplikacja wielowątkowa prosty komunikator

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

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

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

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

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

Współbieżność w Javie

1 Atrybuty i metody klasowe

Programowanie wielowątkowe. Tomasz Borzyszkowski

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

PODEJŚCIE OBIEKTOWE. Przykład 1 metody i atrybuty statyczne

Współbieżność w Javie

Systemy Rozproszone - Ćwiczenie 4

Programowanie współbieżne Laboratorium nr 11

Aplikacje w środowisku Java

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

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

Aplikacje w środowisku Java

Przykłady interfejsu TCP i UDP w Javie

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

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

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

Wywoływanie metod zdalnych

Programowanie obiektowe zastosowanie języka Java SE

Programowanie obiektowe

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

Aplikacje RMI

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

Aplikacje RMI Lab4

Klasy abstrakcyjne i interfejsy

Aplikacja wielow tkowa prosty komunikator

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 programowania w lejos

Multimedia JAVA. Historia

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

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

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

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Remote Method Invocation 17 listopada 2010

Programowanie i projektowanie obiektowe

JAVA W SUPER EXPRESOWEJ PIGUŁCE

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

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

Podejście obiektowe do budowy systemów rozproszonych

Remote Method Invocation 17 listopada Dariusz Wawrzyniak (IIPP) 1

Programowanie obiektowe

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

Dokumentacja do API Javy.

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

Programowanie obiektowe i zdarzeniowe

Polimorfizm, metody wirtualne i klasy abstrakcyjne

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

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

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

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

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

Wykład 4: Klasy i Metody

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

Programowanie współbieżne i rozproszone

RESTful Android. Na co zwrócić uwagę przy tworzeniu aplikacji klienckich REST na Androidzie

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

Wywoływanie metod zdalnych

1. Czynności przygotowujące aplikację działającą na platformie Java SE Biblioteka5 (należy ją pobrać z załącznika z p.1)

Programowanie sieciowe

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

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

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

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

Systemy Rozproszone - Ćwiczenie 6

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

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

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

package pakieta; import pakietb.b; package pakietb; public class B { B(){} public class A { private B b; A(B b) { this.b = b; } }

Java - wprowadzenie. Programowanie Obiektowe Mateusz Cicheński

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

Generatory. Michał R. Przybyłek

Enkapsulacja, dziedziczenie, polimorfizm

Platformy Programistyczne Zagadnienia sieciowe i wątki

WYJĄTKI. Jest ona jednak czasochłonna i prowadzi do duŝego zapotrzebowania na zasoby systemu.

Kompozycja i dziedziczenie klas

Java: interfejsy i klasy wewnętrzne

Transkrypt:

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

Informacje organizacyjne Wymiar godzin: W-30, LAB-15 Zaliczenie wykonanie kilku programów i ich zaliczenie (w trakcie zajęć laboratoryjnych) Egzamin pisemny Materiały: www.ae.krakow.pl/~lulap 2

Program jednowątkowy Wątek - część programu, która moŝe być realizowana w sposób współbieŝny. Program jednowątkowy - składa się z jednej sekwencji instrukcji /tzw. wątek główny programu/ (w języku Java tworzą one treść metody main( ) w klasie bazowej). 3

Program wielowątkowy Z poziomu wątku głównego tworzone są inne, realizowane współbieŝnie, wątki; KaŜdy wątek moŝe tworzyć kolejne wątki; Wątki mogą korzystać ze wspólnych danych; Program wielowątkowy kończy pracę po zrealizowaniu wątku głównego i wszystkich pozostałych wątków. 4

Reprezentacja wątków w języku Java Wątek reprezentowany jest przez klasę będącą potomkiem klasy Thread, której najwaŝniejsze metody to: public Thread() - konstruktor obiektu reprezentującego wątek public Thread(String name) - konstruktor pozwalający nadać nazwę tworzonemu wątkowi public void run() - definiuje operacje realizowane w ramach wątku public void start() - wywołuje metodę run() 5

Definiowanie wątków za pomocą obiektów klasy Thread i pochodnych class Gwiazdka extends Thread public void run() for (int i = 0; i < 10;i++) System.out.print("*"); try sleep(1000); catch(interruptedexception e) 6

... class Plus extends Thread public void run() for (int i = 0; i < 10;i++) System.out.print("+"); try sleep(1000); catch(interruptedexception e) 7

... public class TworzenieWatkow1 public static void main(string [] args) Gwiazdka g = new Gwiazdka(); Plus p = new Plus(); g.start(); p.start(); System.out.print("KONIEC"); Wyniki działania programu KONIEC*++**++*+*+*+*+*+**+ Definicja metody sleep (w klasie Thread): public static void sleep(long millis) throws InterruptedException 8

Definiowanie wątku za pomocą klasy implementującej interfejs Runnable Obliczenia realizowane przez wątek opisane są w klasie implementujacej interfejs Runnable Interfejs Runnable definiuje nagłówek jednej metody: public void run() metoda ta definiuje operacje realizowane w ramach wątku. Przedstawiony mechanizm tworzenia wątków naleŝy stosować wtedy, gdy klasa reprezentująca wątek jest potomkiem klasy innej niŝ Thread (np. klasy Applet) i - z uwagi na jednokrotny charakter dziedziczenia w języku Java - nie moŝe dziedziczyć cech klasy Thread. Obiekt klasy implementującej interfejs Runnable naleŝy przekazać jako parametr konstruktora w trakcie tworzenia obiektu typu Thread. Uruchomienie wątku następuje za pomocą metody start(), która wywołuje metodę run(). 9

Przykład class Gwiazdka implements Runnable public void run() for (int i = 0; i < 10;i++) System.out.print("*"); try Thread.sleep(1000); catch(interruptedexception e) 10

... class Plus implements Runnable public void run() for (int i = 0; i < 10;i++) System.out.print("+"); try Thread.sleep(1000); catch(interruptedexception e) 11

... public class TworzenieWatkow2 public static void main(string [] args) Thread g = new Thread(new Gwiazdka()); Thread p = new Thread(new Plus()); g.start(); p.start(); System.out.print("KONIEC"); Wyniki działania programu KONIEC*+*+*+*+*+*+*+*+*+*+ 12

Korzystanie ze wspólnych zasobów Wątki mogą korzystać ze wspólnych zasobów, ale program powinien sterować dostępem do współuŝytkowanych obiektów. Do sterowanie dostępem do wspólnych zasobów słuŝy mechanizm synchronizacji. 13

Korzystanie ze wspólnych zasobów bez mechanizmu synchronizacji Przykład programu nie zawierającego mechanizmów synchronizacji - wspólnym zasobem jest standardowy strumień wyjściowy. class Watek1 implements Runnable public void run() for (int i = 1; i <= 10; i++) try Thread.sleep(100); catch (InterruptedException e) System.out.print("A"); 14

... class Watek2 implements Runnable public void run() for (int i = 1; i <= 10; i++) try Thread.sleep(100); catch(interruptedexception e) System.out.print("B"); 15

... public class WspolneZasoby public static void main(string [] args) Thread w1 = new Thread(new Watek1()); Thread w2 = new Thread(new Watek2()); w1.start(); w2.start(); System.out.println("KONIEC"); Wynik działania programu: KONIEC BABABAABBABABABAABBA 16

Sekcja krytyczna wątku Sekcja krytyczna wątku - fragment programu (będącego częścią wątku), z poziomu którego następuje odwołanie do wspólnego zasobu. W danej chwili tylko jeden wątek moŝe realizować kod tworzący sekcję krytyczną. 17

Schemat sekcji krytycznej Wątek 1 Wątek 2 sekcja krytyczna sekcja krytyczna Wspólny zasób 18

Realizacja sekcji krytecznej JeŜeli wątek A realizuje swoją sekcję krytyczną, to wątek B, po dojściu do fragmentu kodu tworzącego jego sekcję krytyczną, zostanie wstrzymany, aŝ do chwili zakończenia realizacji sekcji krytycznej przez wątek A. Po zakończeniu realizacji sekcji krytycznej wątku A realizacja wątku B zostanie wznowiona. 19

Monitor jako narzędzie realizacji sekcji krytycznej mechanizm pozwalający na blokowania dostępu do obiektu; blokowanie odbywa się poprzez zajęcie monitora obiektu; monitor moŝe zastać zajęty tylko przez jeden wątek; jeśli wątek A chce zająć monitor obiektu, który jest aktualnie w posiadaniu wątku B, to realizacja wątku A jest wstrzymywana do momentu zwolnienia monitora przez wątek B; kaŝdy obiekt występujący w programie posiada oddzielny monitor. Wątek 1 Wątek 2 sekcja krytyczna Monitor Wspólny zasób sekcja krytyczna 20

Monitor w języku Java synchronized (nazwaobiektu) //zajęcie monitora obiektu... instrukcje tworzące sekcję krytyczną... //zwolnienie monitora obiektu 21

Przykład class Watek1 implements Runnable public void run() synchronized (System.out) for (int i = 1; i <= 10; i++) try Thread.sleep(100); catch (InterruptedException e) System.out.print("A"); 22

... class Watek2 implements Runnable public void run() synchronized (System.out) for (int i = 1; i <= 10; i++) try Thread.sleep(100); catch(interruptedexception e) System.out.print("B"); 23

... public class WspolneZasoby public static void main(string [] args) Thread g = new Thread(new Watek1()); Thread p = new Thread(new Watek2()); g.start(); p.start(); System.out.println("KONIEC"); Wyniki działania programu: KONIEC AAAAAAAAAABBBBBBBBBB UWAGA: Program nie określa, który wątek zajmie monitor obiektu System.out jako pierwszy. Z tego powodu przy kolejnej realizacji programu moŝna uzyskać wynik: KONIEC BBBBBBBBBBAAAAAAAAAA 24