Einführung Verteilte Systeme - Java Threads I -

Ähnliche Dokumente
Dr. Monika Meiler. Inhalt

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Verteilte Systeme CS5001

Praktikum aus Softwareentwicklung 2, Stunde 5

5. Threads, Serverprozesse und Benachrichtigungen

Parallele Prozesse Prozeß Parallele Prozesse verzahnte Prozesse Nebenläufige Prozesse: Threads Vorlesung Software-Entwicklung / Folie 131 Ziele:

2.2 Prozesse in Java

Funktionale und Objekt-Orientierte Programmierkonzepte

Nebenläufige Programmierung in Java: Threads

Parallele Prozesse. Prozeß wartet

Nebenläufigkeit mit Java

Motivation. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 20: Threads. Inhalt. Ein Beispiel zur Motivation

8.6 Visualisierung der Sortieralgorithmen

Ausnahmebehandlung in Java

Mobile und Verteilte Datenbanken

Thread-Synchronisation in in Java. Threads Wechselseitiger Ausschluss Bedingte Synchronisation Beispiel: Warteschlangen

Remote Method Invocation

Betriebssysteme G: Parallele Prozesse (Teil A: Grundlagen)

Java-Programmierung. Remote Method Invocation - RMI

Java Concurrency Utilities

16. Parallelität: Threads

Programmierung mit Threads in Java

Verteilte Systeme - Java Networking (Sockets) -

Nebenläufige Programmierung I

Mobile und Verteilte Datenbanken

Versuchsziele Konzepte der parallelen Programmierung am Beispiel von Threads anwenden können. Einbau von Kontrollmechanismen mittels Semaphore.

Thread-Konzept in objektorientierten Programmiersprachen. Threads. Threads in Java

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

Beispiel für überladene Methode

Teil 2: OOP und JAVA (Vorlesung 11)

12. Threads in Java. Sequentielle Abarbeitung (2) Beispiel: Thread (1) Sequentielle Abarbeitung (1)

Javakurs für Anfänger

Remote Method Invocation

Prozesse. Prozesse sind Programme. Prozesse können aus Unterprozessen bestehen. Prozesshierarchie Unterprozesse Threads

Dezentrale Kontrolle: Aktive Objekte. Aktive Objekte Die Klasse AnimatorThread Aktivierung Objekte beobachten Die Java-Klasse Thread

Java Game Development Fabian Birzele Programmierpraktikum 2008 / 2009

Einstieg in die Informatik mit Java

Zur Erinnerung: Threads. Threadverwaltung. Threads: Prioritäten. Beispiel Flugbuchungsprogramm. Nichtdeterminismus

Parallele und funktionale Programmierung Wintersemester 2015/ Übung Abgabe bis , 10:00 Uhr

Vorname: Nachname: Matrikelnummer: Klausur. Betriebssysteme

Parallele Programmierung in Java

Anleitung. Ein einfaches RMI-Beispiel. (ab Java 5.0) c Y. Pfeifer. (Juni 2014)

Einführung in die Programmierung Blockkurs Java

Systemprogrammierung. Projekt: Java RMI. Wintersemester 2006 / 2007

4. Thread- und Netzwerk- Programmierung

Themen. Web Service - Clients. Kommunikation zw. Web Services

Nebenläufigkeit in Java. Prof. Dr. Margarita Esponda

Java Schulung (Java 2 Java Development Kit 5 / 6)

Ausgewählte Implementierungsprobleme

Nebenläufige Anwendungen in Java (J2SE, Rich Client, J2EE)

1 Organisatorisches. 2 Compilezeit- und Laufzeitfehler. 3 Exceptions. 4 Try-Catch-Finally

IT in der Arztpraxis Technisches Handbuch zum Kodierassistenten

Objektorientierte Programmierung OOP Objektorientierte Programmierung (OOP) mit Java

Synchronisation in Java. Invisible Web

Kapitel 13. Abstrakte Methoden und Interfaces. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz

Nebenläufigkeit mit Java

Programmieren in Java

Android Processes & Services

Nebenläufigkeit in Java

Musterlösungen zur Klausur Informatik 3

Threads In dieser Übung beschäftigen wir uns mit der Realisierung von Threads in Java.

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

Erzeugungsmuster. Kapselung der Objekt-Erzeugung

Java Reflection. Meta-Programmierung mit der java.lang.reflection API. Prof. Dr. Nikolaus Wulff

Exceptions. CoMa-Übung VII TU Berlin. CoMa-Übung VII (TU Berlin) Exceptions / 1

LeJOS: Mindstorms in Java programmieren

Nebenläufige Programmierung I

Multithreading ab Java 5: Die neuen Concurrency APIs

Informatik II Übung 06. Benjamin Hepp 5 April 2017

Methoden und Klassen. Silke Trißl Wissensmanagement in der Bioinformatik

Rekursion. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Klausurvorbereitung VS1 (Prof. Brecht) (B0rg Edition)

Abgabe: keine Pflichtabgabe (vor 12 Uhr) Aufgabe 10.1 (P) Vererbung Gegeben seien folgende Java-Klassen:

Grundlagen zur nebenläufigen Programmierung in Java

Network Communication. Dr. Jürgen Eckerle WS 06/07

AK-Automatisierungs und Kommunikationstechnik TI Technische Informatik. NWT Netzwerktechnik

Institut für Programmierung und Reaktive Systeme 17. Juli Programmieren II. Übungsklausur

Betriebssysteme. Wintersemester Kapitel 2 Prozess und Threads. Patrick Kendzo ppkendzo@gmail.com

Transkript:

Einführung Verteilte Systeme - Java Threads I - Prof. Dr. Michael Cebulla 20. November 2014 Fachhochschule Schmalkalden Wintersemester 2014/15 1 / 38 M. Cebulla Verteilte Systeme

Gliederung Wiederholung: Chat-Server 1 Wiederholung: Chat-Server 2 Allgemeines Grundkonzepte 3 Erzeugung von Threads Methoden zur Steuerung von Threads Ein Beispiel: Simple Threads 4 Probabilistische Approximation von Π Eratosthenes multithreaded 2 / 38 M. Cebulla Verteilte Systeme

Outline Wiederholung: Chat-Server 1 Wiederholung: Chat-Server 2 Allgemeines Grundkonzepte 3 Erzeugung von Threads Methoden zur Steuerung von Threads Ein Beispiel: Simple Threads 4 Probabilistische Approximation von Π Eratosthenes multithreaded 3 / 38 M. Cebulla Verteilte Systeme

Chat-Server II 4 / 38 M. Cebulla Verteilte Systeme

Chat-Server III 5 / 38 M. Cebulla Verteilte Systeme

Chat-Server IV 6 / 38 M. Cebulla Verteilte Systeme

Chat-Server V 7 / 38 M. Cebulla Verteilte Systeme

Chat-Server VI 8 / 38 M. Cebulla Verteilte Systeme

Chat-Client I Wiederholung: Chat-Server 9 / 38 M. Cebulla Verteilte Systeme

Chat-Client II 10 / 38 M. Cebulla Verteilte Systeme

Chat-Client III 11 / 38 M. Cebulla Verteilte Systeme

Chat-Client IV 12 / 38 M. Cebulla Verteilte Systeme

Chat-Client V 13 / 38 M. Cebulla Verteilte Systeme

Outline Wiederholung: Chat-Server Allgemeines Grundkonzepte 1 Wiederholung: Chat-Server 2 Allgemeines Grundkonzepte 3 Erzeugung von Threads Methoden zur Steuerung von Threads Ein Beispiel: Simple Threads 4 Probabilistische Approximation von Π Eratosthenes multithreaded 14 / 38 M. Cebulla Verteilte Systeme

Allgemeines Grundkonzepte Im Allgemeinen wird unter Programmierung die Entwicklung sequentieller Programme verstanden. Das Verhalten eines Programms wird mit der festgelegten Abarbeitung von Programmschritten in einer determinierten Reihenfolge gleichgesetzt. Dies ist spätenstens seit der Verbreitung von Multicore-Prozessoren nicht mehr zutreffend. Heutzutage ist die von Programmen der Standardfall. Jeder Programmierer muss sich mit den entsprechenden Herausforderungen und Programmierkonzepten auseinandersetzen. 15 / 38 M. Cebulla Verteilte Systeme

Allgemeines Grundkonzepte Java Support für Multithreading High-level APIs in java.util.concurrent. Nativer Support für in der Laufzeitumgebung 16 / 38 M. Cebulla Verteilte Systeme

Prozesse und Threads I Allgemeines Grundkonzepte Prozess besitzt eine konsistente Ausführungsumgebung, die vom Betriebssystem verwaltet wird. Das Betriebssystem weist dem Prozess Ressourcen (z.b. Speicherplatz, Prozessoren) zu. Häufig wird ein Programm mit einem Prozess gleichgesetzt. In Java entspricht eine VM i.d.r. einem Prozess 17 / 38 M. Cebulla Verteilte Systeme

Prozesse und Threads II Allgemeines Grundkonzepte Thread Lightweight Process. Ein Prozess enthält einen oder mehrere Threads. Threads teilen sich die Ressourcen eines Prozesses. Man unterscheidet zwischen System- und User-Threads. Java- bestehen aus mehreren (System-)Threads, die dem Programmierer in der Regel unzugänglich sind. Zu Beginn gibt es jedoch nur einen User-Thread, der die Fähigkeit hat, neue Threads zu erzeugen. 18 / 38 M. Cebulla Verteilte Systeme

Time-Sharing vs. Multicore Allgemeines Grundkonzepte 19 / 38 M. Cebulla Verteilte Systeme

Outline Wiederholung: Chat-Server Erzeugung von Threads Methoden zur Steuerung von Threads Ein Beispiel: Simple Threads 1 Wiederholung: Chat-Server 2 Allgemeines Grundkonzepte 3 Erzeugung von Threads Methoden zur Steuerung von Threads Ein Beispiel: Simple Threads 4 Probabilistische Approximation von Π Eratosthenes multithreaded 20 / 38 M. Cebulla Verteilte Systeme

Threads als Objekte Erzeugung von Threads Methoden zur Steuerung von Threads Ein Beispiel: Simple Threads Threads fügen sich als Objekte in das OOP-Paradigma von Java ein. Jeder Thread ist mit einem Thread-Objekt verbunden, das es gestattet, ihn zu steuern. Aus der Klasse Thread wird ein Objekt erzeugt, dass es erlaubt, asynchrone Aufgaben zu erledigen. 21 / 38 M. Cebulla Verteilte Systeme

Erzeugung von Threads Methoden zur Steuerung von Threads Ein Beispiel: Simple Threads Erzeugung eines Threads - Klasse vs. Interface Eine Thread-Klasse enthält den Programm-Code der vom Thread nebenläufig auszuführen ist. Erben von der Klasse Thread public class HelloThread extends Thread { public void run() { System.out.println("Hello from a thread!"); } public static void main(string args[]) { (new HelloThread()).start(); } } Vererbung: Einfach zu Handhaben - dafür eingeschränkter: Java kennt keine Mehrfachvererbung. 22 / 38 M. Cebulla Verteilte Systeme

Erzeugung von Threads Methoden zur Steuerung von Threads Ein Beispiel: Simple Threads Erzeugung eines Threads - Interface Implementierung des Interface Runnable public class HelloRunnable implements Runnable { public void run() { System.out.println("Hello from a thread!"); } public static void main(string args[]) { (new Thread(new HelloRunnable())).start(); } } Allgemeiner: Die Klasse kann auch von anderen Klassen abgeleitet werden. Die Task (Runnable) wird vom Thread getrennt. 23 / 38 M. Cebulla Verteilte Systeme

Lifecycles eines Threads Erzeugung von Threads Methoden zur Steuerung von Threads Ein Beispiel: Simple Threads 24 / 38 M. Cebulla Verteilte Systeme

Pausieren mit Thread.sleep() Erzeugung von Threads Methoden zur Steuerung von Threads Ein Beispiel: Simple Threads Thread.sleep() Der Aufruf von sleep() hält die Ausführung eines Threads an. Die InterruptedException wird geworfen, wenn die Sleep-Phase durch einen anderen Thread unterbrochen wird. Es ist nicht garantiert, dass die Zeit von sleep exakt eingehalten wird. public class SleepMessages { public static void main(string args[]) throws InterruptedException { for (int i = 0; i < 100; i++) { Thread.sleep(4000); System.out.println("Sleep " + i); } } 25 / 38 M. Cebulla Verteilte Systeme

Interrupts Wiederholung: Chat-Server Erzeugung von Threads Methoden zur Steuerung von Threads Ein Beispiel: Simple Threads Interrupts Interrupts stellen eine Aufforderung zur Unterbrechung der Ausführung eines Threads dar. Sie werden von anderen Threads ausgelöst und müssen durch die Implementierung des Threads unterstützt werden. Der Aufruf von interrupt setzt das interrupt-flag. } } for (int i = 0; i < 100; i++) { try { Thread.sleep(4000); } catch (InterruptedException e){ return; } System.out.println("Sleep " + i); } 26 / 38 M. Cebulla Verteilte Systeme

Verwendung von interrupted Erzeugung von Threads Methoden zur Steuerung von Threads Ein Beispiel: Simple Threads for (int i = 0; i < inputs.length; i++) { heavycrunch(inputs[i]); if (Thread.interrupted()) { return; } } 27 / 38 M. Cebulla Verteilte Systeme

Joins Wiederholung: Chat-Server Erzeugung von Threads Methoden zur Steuerung von Threads Ein Beispiel: Simple Threads Joins Mit Hilfe des join-statments ist es möglich, dass ein Thread wartet, bis ein anderer seine Arbeit beendet hat. t.join(); 28 / 38 M. Cebulla Verteilte Systeme

Beispiel: Simple Threads Erzeugung von Threads Methoden zur Steuerung von Threads Ein Beispiel: Simple Threads Das Beispiel zeigt, wie zwei Threads miteinander kommunizieren: Den Haupt-Thread, der in jedem Programm vorhanden ist. Einen Unter-Thread, der vom Haupt-Thread erzeugt und gesteuert wird. 29 / 38 M. Cebulla Verteilte Systeme

Simple Thread: der Unter-Thread Erzeugung von Threads Methoden zur Steuerung von Threads Ein Beispiel: Simple Threads try { for (int i = 0; i < importantinfo.length; i++) { Thread.sleep(4000); threadmessage(importantinfo[i]); } } catch (InterruptedException e) { threadmessage("i wasn t done!"); } 30 / 38 M. Cebulla Verteilte Systeme

Simple Thread: der Haupt-Thread Erzeugung von Threads Methoden zur Steuerung von Threads Ein Beispiel: Simple Threads long starttime = System.currentTimeMillis(); Thread t = new Thread(new MessageLoop()); t.start(); while (t.isalive()) { if (((System.currentTimeMillis() - starttime) > patience) && t.isalive()) { threadmessage("tired of waiting!"); t.interrupt(); t.join(); } } threadmessage("finally!"); 31 / 38 M. Cebulla Verteilte Systeme

Outline Wiederholung: Chat-Server Probabilistische Approximation von Π Eratosthenes multithreaded 1 Wiederholung: Chat-Server 2 Allgemeines Grundkonzepte 3 Erzeugung von Threads Methoden zur Steuerung von Threads Ein Beispiel: Simple Threads 4 Probabilistische Approximation von Π Eratosthenes multithreaded 32 / 38 M. Cebulla Verteilte Systeme

Ansatz Wiederholung: Chat-Server Probabilistische Approximation von Π Eratosthenes multithreaded Ein Viertelkreis mit radius 1 hat die Fläche π 4. Ein Quadrat mit der Seitenlänge 1 hat die Fläche 1. Bei Gleichverteilung ist die Wahrscheinlichkeit, dass ein zufällig gewählter Punkt im Viertelkreis liegt, π 4. Bei einer hohen Zahl von Versuchen ist die Anzahl der Punkte im Viertelkreis geteilt durch die Gesamtzahl eine Approximation an π 4. 33 / 38 M. Cebulla Verteilte Systeme

Ansatz 2 Wiederholung: Chat-Server Probabilistische Approximation von Π Eratosthenes multithreaded Die Kreislinie wird beschrieben durch die Gleichung x 2 + y 2 = 1 Zufällig ausgewählte Punkte mit x 2 + y 2 < 1 liegen im Viertelkreis 34 / 38 M. Cebulla Verteilte Systeme

Die run-methode Probabilistische Approximation von Π Eratosthenes multithreaded 35 / 38 M. Cebulla Verteilte Systeme

Thread-Steuerung Probabilistische Approximation von Π Eratosthenes multithreaded 36 / 38 M. Cebulla Verteilte Systeme

Sieve-Thread Probabilistische Approximation von Π Eratosthenes multithreaded 37 / 38 M. Cebulla Verteilte Systeme

Ausblick Wiederholung: Chat-Server Probabilistische Approximation von Π Eratosthenes multithreaded Konzepte zur Erzeugung und Steuerung von Threads Demnächst: Synchronisation von Threads Weitergehende Konzepte für Java-Threads 38 / 38 M. Cebulla Verteilte Systeme