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



Podobne dokumenty
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

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

Kurs programowania. Wykład 8. Wojciech Macyna

Wątki w Javie. Piotr Tokarski

Programowanie wielowątkowe. Tomasz Borzyszkowski

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

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

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

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

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

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

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

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

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

Podstawy współbieżności

Język Java wątki (streszczenie)

Współbieżność w Javie

Systemy operacyjne. Zajęcia 11. Monitory

Programowanie współbieżne i rozproszone

Współbieżność w Javie

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

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

Programowanie współbieżne Wykład 10 Synchronizacja dostępu do współdzielonych zasobów. Iwona Kochańska

Kurs języka Python. Wątki

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

Klient-Serwer Komunikacja przy pomocy gniazd

7. Pętle for. Przykłady

Programowanie komputeró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

Platformy Programistyczne Zagadnienia sieciowe i wątki

Java Collections Framework

Java Podstawy. Michał Bereta

Język Java wątki (streszczenie)

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

Proces z sekcją krytyczną. Synchronizacja procesów. Synchronizacja procesów, cd. Synchronizacja procesów, cd. Synchronizacja procesów, cd

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

Przeplot. Synchronizacja procesów. Cel i metody synchronizacji procesów. Wątki współbieżne

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

Kolejki FIFO (łącza nazwane)

synchronizacji procesów

synchronizacji procesów

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

Java Podstawy. Michał Bereta

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

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

Wprowadzenie do projektu QualitySpy

Programowanie obiektowe

Java - wprowadzenie. Programowanie Obiektowe Mateusz Cicheński

KORPORACYJNE SYSTEMY ZARZĄDZANIA INFORMACJĄ

Od uczestników szkolenia wymagana jest umiejętność programowania w języku C oraz podstawowa znajomość obsługi systemu Linux.

Proces z sekcją krytyczną. Synchronizacja procesów. Synchronizacja procesów, cd. Synchronizacja procesów, cd. Synchronizacja procesów, cd

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

Wykład 4. Synchronizacja procesów (i wątków) cześć I. Wojciech Kwedlo, Wykład z Systemów Operacyjnych -1- Wydział Informatyki PB

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

Programowanie współbieżne i rozproszone w języku Java

w odróżnieniu od procesów współdzielą przestrzeń adresową mogą komunikować się za pomocą zmiennych globalnych

Aplikacja Sieciowa wątki po stronie klienta

Serwery Statefull i Stateless

Diagram wdrożenia. Rys. 5.1 Diagram wdrożenia.

Pętle. for, while, do... while, foreach. Materiał pomocniczy do kursu Podstawy programowania Autor: Grzegorz Góralski ggoralski.

Zaawansowany kurs języka Python

Mechanizmy pracy równoległej. Jarosław Kuchta

OPCJE DOSTAWY W SERWISIE WIRTU.PL

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.

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

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

Przykładowe zadanie z unikania blokad.

Temat zajęć: Tworzenie i obsługa wątków.

Dokumentacja wstępna TIN. Rozproszone repozytorium oparte o WebDAV

Klient poczty elektronicznej - Thunderbird

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

Programowanie obiektowe

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Zalety programowania prostych gier komputerowych w Javie

PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec

Programowanie obiektowe

Wykład Ćwiczenia Laboratorium Projekt Seminarium

Zadanie 2: transakcyjny protokół SKJ (2015)

1. Język JAVA. 1. Pierwszy program. 2. Kalkulator. 3. Klasy. 4. Dziedziczenie

Systemy Rozproszone - Ćwiczenie 4

Zaawansowane aplikacje internetowe

Model pamięci. Rafał Skinderowicz

Programowanie współbieżne Zadanie numer 3 Monitory

Java. Æwiczenia zaawansowane

Aplikacje internetowe i rozproszone - laboratorium

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

Programowanie współbieżne Wykład 7. Iwona Kochaoska

IdyllaOS. Prosty, alternatywny system operacyjny. Autor: Grzegorz Gliński. Kontakt:

Aplikacje WWW - laboratorium

8. Wektory. Przykłady Napisz program, który pobierze od użytkownika 10 liczb, a następnie wypisze je w kolejności odwrotnej niż podana.

Dziedziczenie. Zadanie 1

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

Task Parallel Library

D:\DYDAKTYKA\ZAI_BIS\_Ćwiczenia_wzorce\04\04_poprawiony.doc 2009-lis-23, 17:44

Doskonalenie procesów - TO BE (tak będzie) Ujęcie statyczne

Instrukcja do laboratorium Systemów Operacyjnych. (semestr drugi)

Wprowadzenie do programowania współbieżnego

Transkrypt:

Laboratorium 7 Wstęp Jednym z podstawowych własności Javy jest wielowątkowość. Wiąże się to z możliwością współbieżnego wykonywania różnych operacji w ramach pojedynczej wirtualnej maszyny Javy (JVM). Wielowątkowość realizowana jest poprzez umieszczenie kodu realizowanego współbieżnie w metodzie run klasy rozszerzającej klasę Thread lub implementującej interfejs Runnable Przykład 1 Przykład 2 Stworzenie klasy nie jest równoznaczne z wykorzystaniem wielowątkowości. Uzyskuje się ją dopiero poprzez inicjalizację wątku. Odpowiednio: Do przykład 1 Do przykład 2 Należy równocześnie pamiętać iż program główny również wykonywany jest w osobnym wątku. Jednym z zagadnień związanych z operacją na wątkach jest synchronizacja wątków. Synchronizacja wątków to proces, w którym wymuszamy by wątki oczekują na swoje zakończenie, aby program

główny mógł kontynuować swoje działanie. Powyższy problem można zrealizować korzystając z metody join() Osobnym zagadnieniem jest zapewnienie spójności danych i rozwiązanie problemu dostępu do danych współdzielonych. Aby zapewnić ich spójność Java oferuje słowo kluczowe synchronized. Wywołanie metody lub fragmentu kodu oznaczonego tym słowem powoduje ustawienie semafora na danym obiekcie, co jednocześnie blokuje dostęp innym wątkom do wykonania tzw. sekcji krytycznej kodu na tym obiekcie (sekcja krytyczna to fragment kodu wykonywany tylko przez jeden wątek). Przedstawia to poniższy fragment:

Stworzenie tablicy wątków Klasa Watek Inicjalizacja i uruchomienie wątków Stworzenie tablicy wątków Oczekiwanie na zakończenie wątków Odczytanie licznika Klasa Licznik W powyższym przykładzie wykorzystanie słówka synchronized gwarantuje nam że proces inkrementacji licznika odbywa się w sekcji krytycznej, tzn że inkrementacje może zrealizować tylko

jeden wątek. Jeśli określony wątek nie może zostać w danej chwili wykonany zasypia o oczekuje na możliwość wejścia do sekcji krytycznej. W pewnych przypadkach może się zdarzyć, że dany wątek nie może wykonywać swoich operacji, gdyż występuje np. brak danych na których mógłby wykonywać operacje. Wówczas taki wątek powinien zasnąć. W tym celu wykorzystuje się metodę wait(), która wprowadza wątek w stan uśpienia, czyli oddaje swój czas procesora innym wątkom. Obudzenie dokonuje się po wywołaniu polecenia notify() lub notifyall(). Przykładem powyższego problemu może być zagadnienie produenta i konsumenta. Tzn. producent może wytworzyć towar i wrzucić go do magazynu, ale tylko gdy magazyn jest pusty. Konsument natomiast pobiera towar z magazynu tylko jeśli on tam jest, a pobranie towaru z magazynu zwalnia miejsce na nowy towar. Powyższe przedstawia poniższy przykład: Metoda uruchamieniowa: Czekamy 10 tyś milisekund Wywołujemy przerwanie wątków. UWAGA działanie zależne od obsługi wyjątku!!! Klasa Producent Producent w nieskończonej pętli dodaje towar. Jeśli nie może dodać to czeka UWAGA wyjątek przechwycony po za pętlą, inaczej program nigdy by się nie skończył

Klasa Konsument Pobranie towaru z magazynu, jeśli jest gotowy. Inaczej czekamy UWAGA wyjątek przechwycony po za pętl inaczej program nigdy by się nie skończył Klasa Magazyn Sprawdzamy czy towar już jest w magazynie, jeśli tak to czekamy Jeśli towaru brak to wkładamy towar i budzimy wątki Sprawdzamy czy towar już jest w magazynie, jeśli nie to czekamy Jeśli towar jest to go pobieramy i budzimy wątki

Zadania 1. Stwórz dwa wątki poprzez implementacje po klasie Runnable. Każdy z wątków ma w pętli wypisywać liczby. Wątek 1 ma wypisywać liczby z przedziału 0 do 20, a wątek 2 liczby z przedziału 100 do 120. Wątek główny powinien poczekać na zakończenie wątków dodatkowych i zakończyć działanie. 2. Zmodyfikuj powyższy program tak, aby najpierw wypisały się liczby z wątku 2, a potem liczby z wątku 1. Dla uproszczenia możesz przekazać referencje dla tworzonych wątków miedzy sobą 3. Zaimplementuj przykład z licznikiem. Co się dzieje i dlaczego program nie działa jeśli nie skorzystamy z synchronizacji? 4. Napisz program realizujący tzw problem fryzjera: W zakładzie fryzjerskim znajduje się tylko jeden fotel oraz poczekalnia z określoną liczbą miejsc. Pracuje w nim jeden fryzjer. Do zakładu przychodzą klienci, którzy chcą się obstrzyc. Zaprogramuj funkcjonowanie zakładu fryzjerskiego zachowując następujące własności: Kiedy fryzjer kooczy obcinad klienta, klient wychodzi a fryzjer zagląda do poczekalni czy są kolejni klienci. Jeśli jakiś klient czeka w poczekalni wówczas zaprasza go na fotel i zaczyna strzyżenie. Jeśli poczekalnia jest pusta, wówczas fryzjer ucina sobie drzemkę na fotelu. Klient, który przychodzi do zakładu, sprawdza co robi fryzjer. Jeśli fryzjer strzyże, wówczas klient idzie do poczekalni, i jeśli jest wolne miejsce to je zajmuje i czeka. Jeśli nie ma wolnego miejsca, wówczas klient rezygnuje. Jeśli fryzjer śpi, to budzi go.