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

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

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

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

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

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

Kurs programowania. Wykład 8. Wojciech Macyna

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

Język Java wątki (streszczenie)

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

Programowanie komputerów

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

Java. Programowanie Obiektowe Mateusz Cicheński

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

Język Java wątki (streszczenie)

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

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

Współbieżność w Javie

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

Podstawy współbieżności

Programowanie współbieżne Laboratorium nr 11

Wątki w Javie. Piotr Tokarski

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

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

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 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: interfejsy i klasy wewnętrzne

Programowanie obiektowe

Programowanie obiektowe

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

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

Operatory. Składnia. Typy proste. Znaki specjalne

JAVA W SUPER EXPRESOWEJ PIGUŁCE

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

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?

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

Programowanie i projektowanie obiektowe

Multimedia JAVA. Historia

Generatory. Michał R. Przybyłek

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

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

Programowanie obiektowe

Aplikacja wielow tkowa prosty komunikator

Model pamięci. Rafał Skinderowicz

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

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

Programowanie współbieżne i rozproszone

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

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

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

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

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

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

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

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

Aplikacje RMI Lab4

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

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

Java SE, Laboratorium nr 8 Wątki

Programowanie współbieżne Laboratorium nr 12

Java - wprowadzenie. Programowanie Obiektowe Mateusz Cicheński

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

Przykłady interfejsu TCP i UDP w Javie

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

1 Atrybuty i metody klasowe

Testy jednostkowe - zastosowanie oprogramowania JUNIT 4.0 Zofia Kruczkiewicz

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

Dokumentacja do API Javy.

Klasy abstrakcyjne i interfejsy

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

Klasy abstrakcyjne, interfejsy i polimorfizm

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

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

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

Aplikacje w środowisku Java

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

Polimorfizm. dr Jarosław Skaruz

Stanowe komponenty sesyjne

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

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

Programowanie obiektowe

Programowanie obiektowe

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

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

Wykład 7: Pakiety i Interfejsy

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

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

Java EE produkcja oprogramowania

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

Transkrypt:

Wątki Threads

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 rozwiazać problem! Implementacja oparta 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

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) ; public void run() { 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 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)

Przykład class Animation implements Runnable {... public void run() { while ( true ) { // Draw Frames... repaint(); Animation happy = new Animation("Mr. Happy"); Thread mythread = new Thread( happy ); mythread.start();...

Przykład

Usypianie wątku try { 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() public void run() { while(true) { System.out.println(this); if(--countdown == 0) return; try { sleep(100); catch (InterruptedException e) { throw new RuntimeException(e);

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

Model stanów

Synchronizacja wątków 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*

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(); public void run() { try { while ( true ) { putmessage(); sleep( 1000 ); catch( InterruptedException e ) {...

Konsument class Consumer extends Thread {... public void run() { try { while ( true ) { String message = producer.getmessage(); System.out.println("Got message: " + message); sleep( 2000 ); catch( InterruptedException e ) {

putmessage() private synchronized void putmessage() throws InterruptedException { while ( messages.size() == MAXQUEUE ) wait(); messages.addelement( new java.util.date().tostring() ); notify();

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() Literatura pomocnicza: M. Ben_Ari, Podstawy programowania współbieżnego, WNT Warszawa 1989

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 ) { try { Thread.currentThread().sleep(100); catch (InterruptedException e) { // obsługa błędu azymut++; azymut %=360; repaint(); //end of while

Setter public void setazymut (int newazymut) { this.newazymut = newazymut; // repaint(); Thread does it instead

Źródło impulsów - założenia public interface PulseSource { final static byte BURST_MODE = 0; final static byte CONTINOUS_MODE = 1; void addpulselistener(pulselistener pl); void removepulselistener(pulselistener pl); void trigger() ; // start generacji impulsów void setmode(byte mode) ; byte getmode() ; void halt() ; // zatrzymaj generację void setpulsedelay(int ms) ; int getpulsedelay() ; void setpulsecount(int burst) ;

Źródło impulsów public class PulseGenerator extends Thread implements PulseSource byte mode ; boolean on ;... public PulseGenerator() { mode = PulseSource.BURST_MODE ; start() ;

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