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

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

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

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

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

Kurs programowania. Wykład 8. Wojciech Macyna

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

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

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

Język Java wątki (streszczenie)

Język Java wątki (streszczenie)

Programowanie komputerów

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

Java. Programowanie Obiektowe Mateusz Cicheński

Współbieżność w Javie

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

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

Współbieżność w Javie

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

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

Programowanie współbieżne Laboratorium nr 11

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

Wątki w Javie. Piotr Tokarski

Podstawy współbieżności

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

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

Systemy Rozproszone - Ćwiczenie 4

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

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

Aplikacja wielowątkowa prosty komunikator

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

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

Java: interfejsy i klasy wewnętrzne

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

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

Programowanie wielowątkowe. Tomasz Borzyszkowski

JAVA W SUPER EXPRESOWEJ PIGUŁCE

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

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

Programowanie obiektowe

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

Programowanie obiektowe

Generatory. Michał R. Przybyłek

Aplikacja wielow tkowa prosty komunikator

Języki Programowania II Wykład 3. Java podstawy. Przypomnienie

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

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

Operatory. Składnia. Typy proste. Znaki specjalne

Programowanie i projektowanie obiektowe

Programowanie obiektowe

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

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

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

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

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

Model pamięci. Rafał Skinderowicz

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

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

Multimedia JAVA. Historia

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

Java - wprowadzenie. Programowanie Obiektowe Mateusz Cicheński

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

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

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

Testy jednostkowe - zastosowanie oprogramowania JUNIT 4.0 Zofia Kruczkiewicz

Java SE, Laboratorium nr 8 Wątki

Aplikacje RMI Lab4

Dokumentacja do API Javy.

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

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

Programowanie wielowątkowe. Jarosław Kuchta

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

Klasy abstrakcyjne, interfejsy i polimorfizm

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

dziedziczenie - po nazwie klasy wystąpią słowa: extends nazwa_superklasy

Plan wykładu CORBA. Cechy aplikacji rozproszonych. Aplikacje rozproszone

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

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

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

Klasy abstrakcyjne i interfejsy

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

Przykłady interfejsu TCP i UDP w Javie

Programowanie współbieżne Laboratorium nr 12

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

Polimorfizm. dr Jarosław Skaruz

Wykład 7: Pakiety i Interfejsy

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

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 i rozproszone

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

Stanowe komponenty sesyjne

Programowanie w języku Java

SWING c.d. przydatne narzędzia: JFileChooser, JOptionPane. drag'n drop, menu kontekstowe.

Przykład -

1 Atrybuty i metody klasowe

Programowanie obiektowe zastosowanie języka Java SE

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

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

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

Wprowadzenie do programowania współbieżnego. Grafika, Proste Animacje

Transkrypt:

Wątki (Threads) Concurrent programming is like stepping into an entirely new world and learning a new programming language!!! (grząski grunt) Unikaj jeśli moŝesz! Oparte są zwykle na wielozadaniowym SO (dlatego brak JVM dla DOS, w3.1) Potrzeby One of the most compelling reasons for concurrency is to produce a responsive user interface. Twój program realizuje eksperyment, masz na GUI przycisk <quit>? Sprawdzasz jego stan co pewien odcinek czasu? Przetwarzanie równoległe i współbieŝne Cechy programowania wątkowego Zachowanie wątków jest zaleŝne od platformy program wielowątkowy moŝe być wolniejszy! W Javie mamy 10 poziomów priorytetu (Solaris 2 31, NT 7) Thread.MAX_PRIORITY, Thread.NORM_PRIORITY, Thread.MIN_PRIORITY A thread can be preempted at any time by another thread Szeregowanie rotacyjne Przeplot czasowy 1

Klasa Thread Klasa Thread nie jest wątkiem! Klasa moŝe być kontrolerem wątku Z faktu Ŝe zdefiniujemy jakąś metodę w klasie pochodnej od Thread nie oznacza, Ŝe działa ona w osobnym wątku! Thread c.d. start( ) //special initialization and then calls run( ). output for one run of this program will be different from that of another!!! thread scheduling mechanism is not deterministic! Pierwszy sposób class simplethread extends Thread { public SimpleThread (String s) { super(s) ; for (int i=0; i<10; i++) { System.out.println(i+ getname()); Przykład wykorzystania class ThreeThreads { main(string[] args) { new SimpleThread( Pierwszy ).start() ; new SimpleThread( Drugi ).start() ; new SimpleThread( Trzeci ).start() ; 2 sposób Interfejs Runnable Przykład Obiekt, który chce być kontrolerem wątku (określać co wątek ma robić) powinien wskazać Ŝe dysponuje odpowiednią metodą wykonawczą deklarując implementację interfejsu Runnable w którym zdefiniowano metodę: public interface Runnable { abstract public void run(); Obiekty klas implementujących interfejs Runnable moŝemy określić jako wykonywalne (aktywne) gdyŝ mogą być podstawą do uruchomienia wątku KaŜdy obiekt moŝe być kontrolerem wątku (klasa moŝe implementować dowolna liczbę interfejsów) class Animation implements Runnable { while ( true ) { // Draw Frames repaint(); Animation happy = new Animation("Mr. Happy"); Thread mythread = new Thread( happy ); mythread.start(); 2

Przykład Usypianie wątku Thread.sleep ( 1000 ); catch ( InterruptedException e ) { Zakończenie wątku Wątek kończy działanie gdy wystąpi jeden z trzech przypadków: returns from its target run() method interrupted by an uncaught exception before Java 1.2 its stop() method is called public final void stop() Deprecated. This method is inherently unsafe. run() while(true) { System.out.println(this); if(--countdown == 0) return; sleep(100); catch (InterruptedException e) { throw new RuntimeException(e); Thread states Synchronizacja wątków NEW A thread that has not yet started is in this state. RUNNABLE A thread executing in the Java virtual machine is in this state. BLOCKED A thread that is blocked waiting for a monitor lock is in this state. WAITING A thread that is waiting indefinitely for another thread to perform a particular action is in this state. TIMED_WAITING A thread that is waiting for another thread to perform an action for up to a specified waiting time is in this state. TERMINATED A thread that has exited is in this state. Synchronizacja wątków w języka Java bazuje na koncepcji monitorów opracowanej przez C.A.R. Hoare. Monitor spełnia rolę zamka związanego z współuŝytkowanym zasobem. Jeśli zasób jest wolny obejmujesz go (drzwi otwarte wchodzisz i zamykasz). Po zakończeniu uŝywania zwalniasz (otwierasz, wychodzisz następna osoba moŝe skorzystać). Jeśli zasób jest zajęty wątek musi czekać. Monitory związane są z obiektami. Słowo kluczowe synchronized słuŝy do oznaczenia miejsca, w którym wątek musi objąć monitor. Oznaczona tym słowem aktywność wykonuje się niepodzielnie* 3

Metody synchronizowane class SpreadSheet { int cella1, cella2, cella3; synchronized int sumrow() { return cella1 + cella2 + cella3; synchronized void setrow( int a1, int a2, int a3 ) { cella1 = a1; cella2 = a2; cella3 = a3; Synchronizowany blok synchronized ( myobject ) { // Functionality that needs to be synced synchronized void mymethod () { is equivalent to: void mymethod () { synchronized ( this ) { wait() notify() By executing wait() from a synchronized block, a thread gives up its hold on the lock and goes to sleep. A thread might do this if it needs to wait for something to happen in another part of the application. Later, when the necessary event happens, the thread that is running it calls notify() from a block synchronized on the same object. Now the first thread wakes up and begins trying to acquire the lock again. Problem Producent - konsument class Producer extends Thread { static final int MAXQUEUE = 5; private Vector messages = new Vector(); while ( true ) { putmessage(); sleep( 1000 ); catch( InterruptedException e ) { Konsument putmessage() class Consumer extends Thread { while ( true ) { String message = producer.getmessage(); System.out.println("Got message: " + message); sleep( 2000 ); catch( InterruptedException e ) { private synchronized void putmessage() throws InterruptedException { while ( messages.size() == MAXQUEUE ) wait(); messages.addelement( new java.util.date().tostring() ); notify(); 4

getmessage() // Called by Consumer public synchronized String getmessage() throws InterruptedException { notify(); while ( messages.size() == 0 ) wait(); String message = (String)messages.firstElement(); messages.removeelement( message ); return message;??? Gdzie powinny być umieszczone metody getmessage() i putmessage() Wątki w komponencie public class Kompas extends Component implements Runnable { Int azymut, newazymut ; Thread compasthread ; public Kompas(int azymut) { // konstruktor this.azymut = this.newazymut = azymut ; compasthread = new Thread(this); compasthread.start(); //end of constructor Metoda run() public void run () { while(true) { if (newazymut!= azymut ) { Thread.currentThread().sleep(100); catch (InterruptedException e) { // obsługa błędu azymut++; azymut %=360; repaint(); //end of while Setter Źródło impulsów public void setazymut (int newazymut) { this.newazymut = newazymut; // repaint(); Thread does it instead public class PulseGenerator extends Thread implements PulseSource byte mode ; boolean on ; public PulseGenerator() { mode = PulseSource.BURST_MODE ; start() ; 5

Źródło impulsów while (on) { // fire up pulse event // test mode & check if last pulse // sleep for a moment public void halt() { on = false ; public void trigger() {??? 6