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



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

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

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

Kurs programowania. Wykład 8. Wojciech Macyna

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

Język Java wątki (streszczenie)

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

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

Języki i Techniki Programowania II. Wykład 7. Współbieżność 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

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

Podstawy współbieżności

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

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

Wątki w Javie. Piotr Tokarski

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 wielowątkowe: podstawowe koncepcje, narzędzia w Javie. J. Starzyński, JiMP2, rok akad. 2005/2006

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

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 znajduje się on w jednym pliku A.java)?

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

Współbieżność w Javie

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

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

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

Java. Programowanie Obiektowe Mateusz Cicheński

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

Aplikacja wielowątkowa prosty komunikator

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

Programowanie wielowątkowe. Tomasz Borzyszkowski

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 obiektowe

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

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

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

Programowanie współbieżne Laboratorium nr 11

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

Aplikacja wielow tkowa prosty komunikator

Java: interfejsy i klasy wewnętrzne

Operatory. Składnia. Typy proste. Znaki specjalne

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

Systemy Rozproszone - Ćwiczenie 4

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

Programowanie współbieżne Laboratorium nr 12

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

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

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

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Programowanie i projektowanie obiektowe

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

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

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

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

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

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

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

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

Monitory. Jarosław Kuchta

Model pamięci. Rafał Skinderowicz

1. Co można powiedzieć o poniższym kodzie? public class A { void m(int a) { } int m(string s) { return Integer.parseInt(s); }

Aplikacje RMI. Budowa aplikacji rozproszonych. Część 2.

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

Java SE, Laboratorium nr 8 Wątki

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

Kurs programowania. Wykład 9. Wojciech Macyna

Generatory. Michał R. Przybyłek

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

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

Dokumentacja do API Javy.

Systemy operacyjne. Zajęcia 11. Monitory

II Tworzenie klasy Prostokąt dziedziczącej z klasy wątku

Zaawansowane aplikacje WWW - laboratorium

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

Tworzenie i wykorzystanie usług

Algorytmy z powrotami. Algorytm minimax

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

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

Podejście obiektowe. Tablice obiektów Przykład 1 metody i atrybuty statyczne oraz niestatyczne

Dawid Gierszewski Adam Hanasko

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

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

Przykłady interfejsu TCP i UDP w Javie

Przykład -

Wykład 6: Dziedziczenie

Pętle while, for, do while, instrukcje break, continue, switch 1. Pętle

Wykład 4: Klasy i Metody

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

Programowanie obiektowe

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

Klasy abstrakcyjne i interfejsy

Zofia Kruczkiewicz, Programowanie obiektowe - java, wykład 2 1

Podstawy programowania w lejos

Kontenery i komponenty graficzne

Programowanie obiektowe

Podejście obiektowe. Tablice (1) obiektów

Programowanie urządzeń mobilnych. dr inż. Andrzej Grosser na podstawie wykładu dr inż. Juliusza Mikody

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

Transkrypt:

Wątki Streszczenie Celem wykładu jest wprowadzenie do obsługi wątków w Javie. Czas wykładu 45 minut. Definiowanie wątków jako klas potomnych Thread Nadpisanie metody run(). class Watek extends Thread public void run() try for (int i = 0; i < 5; i++) System.out.println(getName()+":"+i); sleep(1); catch (InterruptedException e) class watki public static void main (String args[]) ( new Watek() ). start(); ( new Watek() ). start(); ( new Watek() ). start(); 1

Definiowanie wątków jako klas implementujących Runnable Implementacja metody run(). class Watek implements Runnable public void run() try for (int i = 0; i < 5; i++) System.out.println(i); catch (InterruptedException e) class watki public static void main (String args[]) ( new Thread( new Watek() ) ).start(); ( new Thread( new Watek() ) ).start(); ( new Thread( new Watek() ) ).start(); 2

Synchronizacja wątków funkcje class Klasa synchronized // usunąć void f (String s) // metoda wypisuje nawias przed i po napisie System.out.print("f("+s); try catch (InterruptedException e) System.out.println(")"); class Watek implements Runnable Thread t = new Thread(this); Klasa k; Watek(Klasa a) k = a; public void run() k.f(t.getname()); class watki public static void main (String args[]) Klasa o1 = new Klasa(), o2 = new Klasa(); Watek w1 = new Watek(o1), w2 = new Watek(o1), // przetestować o2 w3 = new Watek(o1); w1.t.start(); w2.t.start(); w3.t.start(); 3

Synchronizacja wątków blok class Klasa void f(string s) // metoda wypisuje nawias przed i po napisie System.out.print("f("+s); try catch (InterruptedException e) System.out.println(")"); class Watek implements Runnable Thread t = new Thread(this); Klasa k; Watek(Klasa a) k = a; public void run() synchronized (k) // obiekt, dla którego wołamy metodę // koniecznie blok k.f(t.getname()); class watki public static void main (String args[]) Klasa o1 = new Klasa(), o2 = new Klasa(); Watek w1 = new Watek(o1), w2 = new Watek(o1), // przetestować o2 w3 = new Watek(o1); w1.t.start(); w2.t.start(); w3.t.start(); 4

Synchronizacja wątków semafor class Watek implements Runnable Thread t = new Thread(this); static Object SEMAFOR = new Object(); void pisz() try for (int i = 0; i < 5; i++) System.out.println(t.getName()+":"+i); catch (InterruptedException e) public void run() synchronized (SEMAFOR) pisz(); class watki public static void main (String args[]) ( new Watek() ).t.start(); ( new Watek() ).t.start(); ( new Watek() ).t.start(); 5

Synchronizacja wątków priorytety class Klasa synchronized void f(string s) System.out.print("f("+s); try catch (InterruptedException e) System.out.println(")"); class Watek implements Runnable Thread t = new Thread(this); Klasa k; Watek(Klasa a) k = a; public void run() try catch (InterruptedException e) k.f(t.getname()); class watki public static void main (String args[]) Klasa o1 = new Klasa(); Watek w1 = new Watek(o1), w2 = new Watek(o1), w3 = new Watek(o1); w1.t.setpriority(4); // zakres 1-10, default 5 w3.t.setpriority(6); // zakres 1-10, default 5 w3.t.setname("najwazniejszy"); w1.t.start(); w2.t.start(); w3.t.start(); 6

Zawieszanie wątków wait class Watek implements Runnable Thread t = new Thread(this); public void run() for (int i = 0; i < 5; ++i) try synchronized (this) // wykomentować System.out.println(i); if (i == 3) wait(); // wykomentować //if (i == 3) wait(1000); // wykomentować catch (InterruptedException e) class watki public static void main (String args[]) Watek w1 = new Watek(), w2 = new Watek(), w3 = new Watek(); w1.t.start(); w2.t.start(); w3.t.start(); 7

Kolejkowanie wątków wait, notify błędna implementacja class Kolejka int a; synchronized void put(int b) a = b; System.out.println("Wlozyles " + a); synchronized int get() System.out.println("Pobrales " + a); return a; class Producent implements Runnable Kolejka k; Thread t = new Thread(this,"Producent"); Producent(Kolejka q) k = q; public void run() int i = 0; while (true) k.put(++i); if (i==5) System.exit(1); class Konsument implements Runnable Kolejka k; Thread t = new Thread(this,"Konsument"); Konsument(Kolejka q) k = q; public void run() while (true) k.get(); class watki public static void main (String args[]) Kolejka k = new Kolejka(); (new Producent(k)).t.start(); (new Konsument(k)).t.start(); 8

Kolejkowanie wątków wait, notify rozwiązanie class Kolejka int a; boolean polozony = false; synchronized void put(int b) if (polozony) try wait(); // usypia wątek i oddaje monitor do momentu // zawołania notify przez inny wątek catch (InterruptedException e) a = b; polozony = true; System.out.println("Wlozyles " + a); notify(); // budzi wątek, ktąry wywołał wait dla tego samego obiektu, // jeśli takie istnieją (notifyall) synchronized int get() if (!polozony) try wait(); catch (InterruptedException e) System.out.println("Pobrales " + a); polozony = false; notify(); return a; class Producent implements Runnable Kolejka k; Thread t = new Thread(this,"Producent"); Producent(Kolejka q) k = q; public void run() int i = 0; while (true) k.put(++i); if (i==5) System.exit(1); class Konsument implements Runnable Kolejka k; 9

Thread t = new Thread(this,"Konsument"); Konsument(Kolejka q) k = q; public void run() while (true) k.get(); class watki public static void main (String args[]) Kolejka k = new Kolejka(); (new Producent(k)).t.start(); (new Konsument(k)).t.start(); 10