Java. Programowanie Obiektowe Mateusz Cicheński

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

Programowanie obiektowe

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

Programowanie obiektowe

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

Programowanie komputerów

Język Java wątki (streszczenie)

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

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

WSNHiD, Programowanie 2, Lab. 3. Trwałość danych

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

Język Java wątki (streszczenie)

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

Kurs programowania. Wykład 8. Wojciech Macyna

Aplikacja wielowątkowa prosty komunikator

Programowane refleksyjne i serializacja

Wątki w Javie. Piotr Tokarski

Programowanie obiektowe

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

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

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

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

Programowanie obiektowe

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

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

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

Programowanie i projektowanie obiektowe

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

Programowanie współbieżne Laboratorium nr 11

1 Klasa File. 2 Writer. Programowanie w j zyku Java - Adam Krechowicz. Klasa File zapewnia podstawowe operacje na plikach

Współbieżność w Javie

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

Systemy Rozproszone - Ćwiczenie 4

1 Atrybuty i metody klasowe

Java SE, Laboratorium nr 8 Wątki

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

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

Podstawy współbieżności

Java niezbędnik programisty spotkanie nr 11. Importy statyczne, wejście/wyjście, wyrażenia regularne, serializacja

Współbieżność w Javie

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

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

Java - wprowadzenie. Programowanie Obiektowe Mateusz Cicheński

STRUMIENIE DANYCH, SERIALIZACJA OBIEKTÓW

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

Aplikacja wielow tkowa prosty komunikator

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

Strumienie i serializacja

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

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

Programowanie obiektowe

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

Java Programowanie Obiektowe Ćwiczenie 1- wprowadzenie

Jakarta POI. POIFS obsługa dokumentów OLE 2, HSSF dokumenty w formacie Excel'a, HWPF proste dokumenty w formacie Word 97,

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

JAVA W SUPER EXPRESOWEJ PIGUŁCE

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

Bezpieczeństwo w aplikacjach Java

Model pamięci. Rafał Skinderowicz

Podstawy programowania w lejos

akademia androida Składowanie danych część VI

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

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

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

Podejście obiektowe do budowy systemów rozproszonych

Remote Method Invocation 17 listopada Dariusz Wawrzyniak (IIPP) 1

Programowanie obiektowe

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

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

Platformy Programistyczne Zagadnienia sieciowe i wątki

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

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

Wykład 12. Programowanie serwera MS SQL 2005 w C#

Stanowe komponenty sesyjne

Programowanie w języku Java

Programowanie równoległe i rozproszone. W1. Wielowątkowość. 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);

Remote Method Invocation 17 listopada 2010

Aplikacje RMI Lab4

Podstawy otwartych języków programowania Wyjątki i strumienie I/O

Java Zadanie 1. Aby poprawnie uruchomić aplikację desktopową, należy zaimplementować główną metodę zapewniającą punkt wejścia do programu.

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

Wywoływanie metod zdalnych

Tworzenie i wykorzystanie usług

Wywoływanie metod zdalnych

Przykłady interfejsu TCP i UDP w Javie

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

Aplikacje w środowisku Java

Operatory. Składnia. Typy proste. Znaki specjalne

KLASY, INTERFEJSY, ITP

JAVA I SIECI. MATERIAŁY:

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

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

Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1)

Remote Method Invocation 17 listopada rozproszonych. Dariusz Wawrzyniak (IIPP) 1

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

Programowanie wielowątkowe. Jarosław Kuchta

Wstęp do ruby dla programistów javy

Transkrypt:

Java Programowanie Obiektowe Mateusz Cicheński

Wielowątkowość Proces a wątek? Thread vs Runnable sleep(), interrupt(), join() Problemy wielowątkowości Obiekty niemodyfikowalne (immutable) Serializacja Przydatne odnośniki Plan zajęć

Proces często traktowany jako wystąpienie uruchomionego programu, posiada przydzielony zbiór zasobów (pamięć, pliki etc.) Wątek lekki proces, wykonuje część programu w sposób współbieżny w obrębie procesu, korzysta z zasobów procesu (zasoby te są współdzielone)

public class HelloWorldThread extends Thread { @Override public void run() { System.out.println("Hello world from Thread"); public class HelloWorldRunnable implements Runnable { @Override public void run() { System.out.println("Hello world from Runnable"); Thread vs Runnable

public static void main(string[] args) { new Thread(new HelloWorldRunnable()).start(); new HelloWorldThread().start(); Hello world from Runnable Hello world from Thread Thread vs Runnable c.d.

public class HelloWorldThread extends Thread { @Override public void run() { try { sleep(5000); catch (InterruptedException e) { wykonywanie wątku jest wstrzymane na określony czas, umożliwiając innym wątkom na wykorzystanie czasu procesora (ale uśpiony wątek nadal może być przerwany!) sleep()

public class HelloWorldThread extends Thread { @Override public void run() { while (true); public static void main(string[] args) throws InterruptedException { Thread thread = new HelloWorldThread(); thread.start; thread.interrupt(); System.out.println(thread.isInterrupted()); //prints true interrupt() zły przykład

public class HelloWorldThread extends Thread { @Override public void run() { while (true) { heavycalculus(); if (Thread.interrupted()) return; public static void main(string[] args) throws InterruptedException { Thread thread = new HelloWorldThread(); thread.start(); thread.interrupt(); interrupt() lepszy przykład

public class HelloWorldThread extends Thread { @Override public void run() { while (true) { heavycalculus(); if (Thread.interrupted()) throw new InterruptedException(); public static void main(string[] args) throws InterruptedException { Thread thread = new HelloWorldThread(); thread.start(); thread.interrupt(); interrupt() jeszcze lepiej

public class HelloWorldThread extends Thread { @Override public void run() { try { sleep(5000); catch (InterruptedException e) { public static void main(string[] args) throws InterruptedException { Thread thread = new HelloWorldThread(); thread.start(); thread.join(); System.out.println( Thread died ); join()

Deadlock Zagłodzenie, livelock Nakładanie się wątków Niespójny stan pamięci Problemy wielowątkowości

Zgodnie z dobrymi manierami kiedy kłaniam się przyjacielowi powinienem pozostać w skłonie dopóty, dopóki przyjaciel ów nie będzie miał okazji do odwdzięczenia się ukłonem. Deadlock

Problem pięciu filozofów Jeśli dwa widelce są równocześnie wolne złap je równocześnie, zjedz i odłóż Zagłodzenie

Dwa wątki chcąc uniknąć deadlock a wzajemnie sobie ustępują, co prowadzi do tego, że żaden z nich nie może kontynuować obliczeń Livelock

public class NamedNumber { private int number; private String name; public NamedNumber(int number, String name) { this.number = number; this.name = name; public void set(int number, String name) { synchronized (this) { this.number = number; this.name = name; public synchronized int getnumber() { return number; NamedNumber number = new NamedNumber(42, "fourty two");... int mynumber = number.getnumber(); //another thread: number.set(0, "nil") String mynumbername = number.getname(); //mynumber = 42, mynumbername = "nil" synchronized (number) { int myint = number.getnumber(); String myname = number.getname(); public synchronized String getname() { return name; public synchronized void changesign() { if (number > 0) { name = "minus " + name; else if (number < 0) { name = name.substring(6); number = -number; Nakładanie się wątków

final public class ImmutableNamedNumber { final private int number; final private String name; public ImmutableNamedNumber(int number, String name) { this.number = number; this.name = name; public int getnumber() { return number; public String getname() { return name; public ImmutableNamedNumber changesign() { if (number > 0) { return new ImmutableNamedNumber(-number, "minus " + name); else if (number < 0) { return new ImmutableNamedNumber(-number, name.substring(6)); return this; //zero is not changed Obiekty typu immutable

Lock więcej możliwości niż synchronizowanie kodu Executor wysokopoziomowe API do zarządzania wątkami Kolekcje wielowątkowe (thread-safe) BlockingQueue, ConcurrentMap Zmienne atomowe (np. AtomicInteger) Inne przydatne elementy dla wielowątkowych aplikacji w Javie

import java.io.serializable; public class LuckyNumber implements Serializable { private static final long serialversionuid = -2531937043590753438L; public final static String message = "Your lucky number is %s! (and obviously not %s)"; public int number; public transient int notluckynumber; public LuckyNumber(int number) { this.number = number; this.notluckynumber = number; public String getmessage() { return String.format(message, number, notluckynumber); Serializacja

public static void serialize(object object, String filename) { try { FileOutputStream fileout = new FileOutputStream(filename); ObjectOutputStream out = new ObjectOutputStream(fileOut); out.writeobject(object); out.close(); fileout.close(); catch (IOException i) { i.printstacktrace(); public static LuckyNumber deserialize(string filename) { LuckyNumber number = null; try { FileInputStream filein = new FileInputStream(filename); ObjectInputStream in = new ObjectInputStream(fileIn); number = (LuckyNumber) in.readobject(); in.close(); filein.close(); catch (IOException i) { i.printstacktrace(); catch (ClassNotFoundException c) { c.printstacktrace(); return number; Serializacja c.d.

public static void main(string[] args) { String filename = "myluckynumber.ser"; LuckyNumber number = new LuckyNumber(42); serialize(number, filename); public static void main(string[] args) { String filename = "myluckynumber.ser"; LuckyNumber number = deserialize(filename); System.out.println(number.getMessage()); Your lucky number is 42! (and obviously not 0) Serializacja c.d.

import java.io.serializable; public class LuckyNumber implements Serializable { private static final long serialversionuid = -210178459216854737L; //this is not serialized by default! public static String message = "Your lucky number is %s! (and obviously not %s)"; public int number; public transient int notluckynumber; public LuckyNumber(int number) { this.number = number; this.notluckynumber = number; public String getmessage() { return String.format(message, number, notluckynumber); private void writeobject(objectoutputstream oos) throws IOException { oos.defaultwriteobject(); oos.writeutf(message); private void readobject(objectinputstream ois) throws ClassNotFoundException, IOException { ois.defaultreadobject(); message = ois.readutf(); Serializacja c.d. 2

public static void main(string[] args) { String filename = "mypirateluckynumber.ser"; LuckyNumber.message = "Your blastedly lucky number be %s! (and obviosly nay %s)"; LuckyNumber number = new LuckyNumber(42); serialize(number, filename); public static void main(string[] args) { String filename = "mypirateluckynumber.ser"; LuckyNumber number = null; number = deserialize(filename); System.out.println(number.getMessage()); Your blastedly lucky number be 42! (and obviosly nay 0) Serializacja c.d. 2

http://sourceforge.net/projects/javaconcu rrenta/ http://docs.oracle.com/javase/8/docs/api/ java/io/serializable.html Odnośniki

Pytania? http://bit.ly/oop2015