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

Podobne dokumenty
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().

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

Programowanie komputerów

Java. Programowanie Obiektowe Mateusz Cicheński

Język Java wątki (streszczenie)

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

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

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

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

Podstawy współbieżności

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

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

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

Wątki w Javie. Piotr Tokarski

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

Kurs programowania. Wykład 8. Wojciech Macyna

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

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

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

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

Aplikacja wielowątkowa prosty komunikator

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

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

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

Współbieżność w Javie

Java SE, Laboratorium nr 8 Wątki

Programowanie współbieżne Laboratorium nr 11

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Współbieżność w Javie

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

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

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

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

Aplikacje w środowisku Java

1 Atrybuty i metody klasowe

Aplikacja wielow tkowa prosty komunikator

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

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

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

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

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

Programowanie wielowątkowe. Tomasz Borzyszkowski

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

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

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

Programowanie współbieżne Laboratorium nr 12

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

Marcin Luckner Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych

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

Multimedia JAVA. Historia

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

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

Programowanie obiektowe

Przykłady interfejsu TCP i UDP w Javie

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

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

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

Programowanie i projektowanie obiektowe

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

Metody Metody, parametry, zwracanie wartości

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

KLASY, INTERFEJSY, ITP

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

Java: interfejsy i klasy wewnętrzne

Wywoływanie metod zdalnych

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

Aplikacje RMI Lab4

Wykład 4: Klasy i Metody

Programowanie obiektowe

Systemy Rozproszone - Ćwiczenie 4

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

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

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Wykład 6: Dziedziczenie

Podejście obiektowe do budowy systemów rozproszonych

Wykład 7: Pakiety i Interfejsy

Stanowe komponenty sesyjne

Dokumentacja do API Javy.

Model pamięci. Rafał Skinderowicz

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

Programowanie obiektowe

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

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

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

Java - wprowadzenie. Programowanie Obiektowe Mateusz Cicheński

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

Dawid Gierszewski Adam Hanasko

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

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

Programowanie Obiektowe Java

Aplikacje RMI

Podstawy i języki programowania

Tworzenie i wykorzystanie usług

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

Remote Method Invocation 17 listopada Dariusz Wawrzyniak (IIPP) 1

Wywoływanie metod zdalnych

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

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

Transkrypt:

Procesy i wątki Proces posiada samodzielne środowisko wykonawcze. Proces posiada własny zestaw podstawowych zasobów w czasie wykonywania; W szczególności, każdy proces ma własną przestrzeń pamięci. W uproszczeniu proces można utożsamiać z działającą aplikacją lub programem. Większość implementacji VM w Javie działa jako samodzielny proces. W ramach jednego procesu może działać wiele wątków. Wątki działające w obrębie jednego procesu współdzielą zasoby, w szczególności pamięć. Język obsługuje programowanie wielowątkowe.

Wątek jako obiekt Każdy wątek to obiekt będący instancją klasy Thread. Aby tworzyć aplikacje wykorzystujące współbieżność, obiekty klasy Thread można wykorzystywać na dwa sposoby: 1. Tworzenie, kontrola i zarządzanie obiektem klasy Thread za każdym razem, gdy potrzeba jest wykonania niezależnego zadania. 2. Zarządzanie wątkami wydzielone jest poza zasadniczą część aplikacji. Zadania realizowane przez wątki przekazywane są do tzw. egzekutora (executor).

Definiowanie i uruchamianie wątku Wątki możemy tworzyć na dwa sposoby: 1. Implementacja interfejsu funkcjonalnego Runnable posiadającego metodę run odpowiedzialną za wykonanie kodu wątku. public class MojWatek implements Runnable public void run() System.out.println( Działa wątek! ); public static void main(string args[]) Thread watek = new Thread(new MojWatek()); watek.start();

Definiowanie wątku 2. Dziedziczenie z klasy Thread. public class MojWatek extends Thread public void run() System.out.println( Działa wątek! ); public static void main(string args[]) MojWatek watek = new MojWatek(); watek.start();

Usypianie wątku Metoda sleep klasy Thread powoduje zatrzymanie działania wątku na określony czas, dając w ten sposób możliwość działania innym nieuśpionym wątkom. public class Threads implements Runnable public void run() for (int i = 10; i >=0; --i) System.out.println(i); try Thread.sleep(1000); catch (InterruptedException ex) System.out.println( Błąd! ); public static void main(string[] args) Thread th1 = new Thread(new Threads()); th1.start();

Przerywanie działania wątku Metoda interrupt klasy Thread powoduje przerwanie działania wątku. Metoda interrupted sprawdza czy dany wątek został przerwany. public class Threads implements Runnable public void run() for (int i = 10; i >=0; --i) System.out.println(i); if (Thread.interrupted()) System.out.println("Przerwano działanie!"); return; public static void main(string[] args) Thread th1 = new Thread(new Threads()); Thread th2 = new Thread(new Threads()); th1.start(); th2.start(); th2.interrupt();

Oczekiwanie na zakończenie wątku Metoda join klasy Thread powoduje zatrzymanie działania bieżącego wątku i oczekiwanie na zakończenie działania drugiego wątku (na rzecz którego join została wywołana). public class Threads implements Runnable public void run() for (int i = 10; i >=0; --i) System.out.println(i); try Thread.sleep(1000); catch (InterruptedException ex) System.out.println("Stop!"); public static void main(string[] args) throws InterruptedException Thread th1 = new Thread(new Threads()); Thread th2 = new Thread(new Threads()); th1.start(); th1.join(); th2.start();

Brak synchronizacji Podczas działania wielu wątków, które mają dostęp do tych samych zasobów, brak synchronizacji powoduje ich niestabilność i brak spójności. class Test int x = 0; public int doit() for (int i = 0; i < 1000; i++) x++; x--; return x; class ThreadTest extends Thread Test t; ThreadTest(Test t) this.t = t; public class Threads public static void main(string[] args) Test t = new Test(); ThreadTest tab[] = new ThreadTest[10]; for (int i = 0; i < tab.length; i++) tab[i] = new ThreadTest(t); tab[i].start(); public void run() System.out.println(t.doIt());

Metoda synchronizowana Użycie metody synchronizowanej na rzecz danego obiektu powoduje zablokowanie innych wątków, które mogą działać na tym samym obiekcie. class Test int x = 0; public synchronized int doit() for (int i = 0; i < 1000; i++) x++; x--; return x; class ThreadTest extends Thread Test t; ThreadTest(Test t) this.t = t; public class Threads public static void main(string[] args) Test t = new Test(); ThreadTest tab[] = new ThreadTest[10]; for (int i = 0; i < tab.length; i++) tab[i] = new ThreadTest(t); tab[i].start(); public void run() System.out.println(t.doIt());

Sekcja krytyczna Sekcja krytyczna to fragment kod, który może w danej chwili być wywoływany tylko przez jeden wątek. wprowadza sekcje krytyczne poprzez zastosowanie metod lub bloków synchronizowanych. public int doit() synchronized(this) for (int i = 0; i < 1000; i++) x++; x--; return x;

Niezależne bloki synchronizowane public class Example private long c1 = 0; private long c2 = 0; private Object lock1 = new Object(); private Object lock2 = new Object(); public void inc1() synchronized(lock1) c1++; public void inc2() synchronized(lock2) c2++;

Dziękuję za uwagę!