Dr. Wolfram Amme, Das Thread-Konzept in objektorientierten Programmiersprachen, Informatik II, FSU Jena, SS 2002 1 Thread-Konzept in objektorientierten.

Slides:



Advertisements
Ähnliche Präsentationen
der Universität Oldenburg
Advertisements

Vertieferseminar Geoinformation WS 02/03
10.2 Wechselseitiger Ausschluss in Hardware
Ein Beispiel in Java.
Beim Start eines Prozesses in Windows NT, 2000 wird a der Programmtext aus der exe-Datei ab der dort angegebenen Adresse gespeichert.
3 Prozessverwaltung  sieht einen Prozess als Objekt der Verwaltung,
Real - Time Java Seminar Asynchrone Ereignisse und Asynchroner Kontrolltransfer in Real - Time Java Sönke Eilers.
Kapitel 6.1 Nebenläufigkeit und wechselseitiger Ausschluss
Ausnahmen HS Merseburg (FH) WS 06/07.
Threads Richard Göbel.
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Indirekte Adressierung
FH-Hof Verwaltung von Zeichenketten Richard Göbel.
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
Kapitel 10 Nebenläufigkeit und wechselseitiger Ausschluss
Nebenläufige Programmierung
Ein Beispiel in Java.
Klassenvariable. Da man für jede Kuh bzw. jede Henne auf dem Markt den gleichen Preis für ein Liter Milch, bzw. den gleichen Preis für ein Ei bekommt,
Programmieren mit JAVA
PRJ 2007/1 Stefan Dissmann Motivation Problem: Benutztes Objekt kennt den Kontext seiner Nutzung nicht. Daher kann es in besonderen Situationen keine Entscheidung.
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
Vortrag III Hier in der Vorlesungszeit! Anwesenheitspflicht Jede Gruppe hat 6 Minuten! Stellt eure GUI vor –was ihr besonderes gemacht habt –Spektakuläre.
DVG Interfaces. DVG mehrfache Vererbung 4 Mehrfache Vererbung ist die Ableitung einer Klassen von mehreren anderen Klassen. –farbigerPunkt.
DVG Einführung in Java1 Einführung in JAVA.
Abstrakte Klassen, Interface
DVG Klassen und Objekte
EDV Parallelprogrammierung1 Parallelprogrammierung mit JAVA.
Klassen 02 - Klassen.
Das Roboterprojekt Einführung Der erste Entwurf Das Thread-Konzept Hindernisse Website.
Java Threads Sebastian Werler
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Parallel Programming Thread Synchronization. Heute 1. Lösung zu Assignment 2 2. Erstellen und Starten von Threads in Java 3. Das synchronized Schlüsselwort.
Parallel Programming Condition Queues
Thread Synchronisation in JAVA
Learning By Doing Ausnahmebehandlung Exceptions (Ausnahmebehandlung) Typische Fehlverhalten zur Laufzeit: s. Buch S. 287ff -Verwendung von null-Objekten.
Learning By Doing Parallelverarbeitung Multithreading (Nebenläufigkeit) Alte Idee der Parallelverarbeitung statt rein sequentieller Prozesse Parallelverarbeitung.
Parallelisierung für Multiprozessor-Maschinen Teil 2.
Parallelisierung für Multiprozessor-Maschinen
Threads in Java Wiederholung der BS Grundlagen Alois Schütte AOSD1.
2. Kommunikation und Synchronisation von Prozessen 2
Informatik I : Software höhere Programmiersprachen Java Klassen: hat Methoden (Funktionen) und Daten (Variablen) es kann mehrere Klassen geben nur eine.
Prof. Dr. Alois Schütte Advanced System Programming 1 Das concurrent Paket 1 Überblick 2 Lock 3 Condition 4 Queue 5 Executors.
Java-Kurs Übung Besprechung der Hausaufgabe
Threads in Java Threads  Sprachumfang von Java Der Java-Standard fordert nur die Unterstützung von Thread-Prioritäten. Es gibt keine Forderung bzgl.:
93 Das Monitorkonzept (nach Hoare/Brinch-Hansen 1974) Nur ein Prozess bzw. Thread kann zu einem bestimmten Zeitpunkt im Monitor aktiv sein => gegenseitiger.
1 VE 11 Kruskal-Realisierung Listen. 2 Auf dem Weg zur Kruskal-Realisierung Vorüberlegungen: Der Graph könnte dargestellt werden als Menge von Knoten,
, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/ Aufzählungstypen.
, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/06 1 Beispiel class SpreadSheet { int cellA1, cellA2, cellA3; synchronized.
Dr. Wolfram Amme, Generisches Programmieren, Informatik II, FSU Jena, SS Generisches Programmieren.
Dr. Wolfram Amme, Virtuelle Vererbung, Informatik II, FSU Jena, SS Auflösung von Konflikten bei Mehrfachvererbung Umbenennung mehrdeutiger Methoden.
Strukturen (Eigenschaften) Strukturen dienen zur Zusammenfassung mehrerer Komponenten verschiedener Typen zu einer Einheit, die dann mit gemeinsamen Namen.
, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Arithmetik in Java Ganzzahl-Division Nulldivision führt zu einer ArithmeticException.
, PD Dr. Wolfram Amme, Tutorium zum Programmierpraktikum, FSU Jena, WS 2006/07 1 Objekte in Java.
Dr. Wolfram Amme, Automatische Speicherverwaltung, Informatik II, FSU Jena, SS Automatische Speicherverwaltung.
, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Kapselung von Daten I Gründe für die Datenkapselung Datenkonsistenz leichtere.
, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Exceptions in der Programmiersprache Java.
, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Synchronisation mit Monitoren Threads können in Java parallel ablaufen, oft.
Praktische Informatik 1
Der kritische Abschnitt
Allgemeine Befehle für die allgemeine Liste
SS 04 Christiane Rauh Christian Hellinger
Einführung in die Programmierung
«Delegierter» Methoden Schablone Funktionszeiger
1. Die rekursive Datenstruktur Liste 1
Implementieren von Klassen
Einführung in die Programmierung
 Präsentation transkript:

Dr. Wolfram Amme, Das Thread-Konzept in objektorientierten Programmiersprachen, Informatik II, FSU Jena, SS Thread-Konzept in objektorientierten Programmiersprachen

Dr. Wolfram Amme, Das Thread-Konzept in objektorientierten Programmiersprachen, Informatik II, FSU Jena, SS Threads ein Thread ist ein eigenständiges Programmfragment, das parallel zu anderen Teilen eines Programmes ablaufen kann alle Threads eines Programmes teilen sich einen gemeinsamen Adressraum (leichtgewichtiger Prozeß) in einem Multithreading-System verwaltet die Rechnerkern- vergabe (Scheduler) die zur Ausführung anstehenden Threads man unterscheidet zwei Arten der Parallelität: –pseudoparallele Abarbeitung auf Einprozessorsystemen –echte parallele Abarbeitung auf Mehrprozessorsystemen

Dr. Wolfram Amme, Das Thread-Konzept in objektorientierten Programmiersprachen, Informatik II, FSU Jena, SS Threads in Java Threads werden in der virtuellen Maschine durch Objekte der Klasse java.lang.Thread repräsentiert virtuelle Maschine verwendet Thread-Objekte zum Starten, Starten oder Suspendieren von Threads ein Thread beginnt die Ausführung mit dem Aufruf der run()- Methode des Thread-Objektes Deklaration eines Threads Konstruktion einer Unterklasse der Klasse Thread Implementierung des Interfaces Runnable Erzeugen eines Threads Erzeugen eines Objektes einer Unterklasse der Klasse der Thread Erzeugen eines Thread-Objektes unter Angabe eines Objektes einer Klasse, welches das Interface Runnable implementiert

Dr. Wolfram Amme, Das Thread-Konzept in objektorientierten Programmiersprachen, Informatik II, FSU Jena, SS Deklaration und Erzeugen eines Threads class TextThread extends Thread { String text; public TextThread(String text){ this.text = text; } public void run() { for(int i = 0; i< 10; i++) System.out.println(text); }... TextThread java = new TextThread(´´Java´´); java.start(); TextThread expresso = new TextThread(´´Expresso´´); expresso.start();

Dr. Wolfram Amme, Das Thread-Konzept in objektorientierten Programmiersprachen, Informatik II, FSU Jena, SS Deklaration und Erzeugen eines Threads class TextThread implements Runnable { String text; public TextThread(String text){ this.text = text; } public void run() { while( true ) System.out.println(text); }... TextThread java = new TextThread(´´Java´´); Thread thread = new Thread(java); thread.start();

Dr. Wolfram Amme, Das Thread-Konzept in objektorientierten Programmiersprachen, Informatik II, FSU Jena, SS Zustände eines Threads seit JDK 1.2 verworfen resume() suspend() resume() suspend() interrupt() sleep() notify(), interrupt() wait(), join() run() zu Ende stop() start() new Scheduler yield() schlafend suspendiert blockiert erzeugt rechenwillig beendet rechnend

Dr. Wolfram Amme, Das Thread-Konzept in objektorientierten Programmiersprachen, Informatik II, FSU Jena, SS Steuerung eines Threads Starten eines Threads java.start(); Beenden eines Threads java.stop(); Unterbrechen eines Threads java.suspend(); Fortsetzen eines Threads java.resume(); Pausieren eines Programmes try { java.sleep(1000) // 1000 ms } catch ( InterruptedException e) { }

Dr. Wolfram Amme, Das Thread-Konzept in objektorientierten Programmiersprachen, Informatik II, FSU Jena, SS Steuerung eines Threads interrupt() - Wecken von schlafenden bzw. blockierten Threads yield() - der aufrufende Thread gibt freiwillig die CPU ab isAlive() - true, falls der Thread gestartet, aber nicht beendet ist join() - wartet auf das Ende des Threads, für den die Methode aufgerufen wurde setName(String) - ändert den Namen des Threads getName() - gibt den Namen des Threads aus setPriority(int) - ändert die Priorität des Threads Thread.MIN_PRIORITY = 0 Thread.MAX_PRIORITY = 10 (Standard - Thread.NORM_PRIORITY = 5) getPriority() - gibt die Priorität des Threads aus

Dr. Wolfram Amme, Das Thread-Konzept in objektorientierten Programmiersprachen, Informatik II, FSU Jena, SS Problem: Zugriff auf gemeinsame Daten abc prog.c prog.n Spooler- Katalog Thread A Thread B out = 4 in = 7

Dr. Wolfram Amme, Das Thread-Konzept in objektorientierten Programmiersprachen, Informatik II, FSU Jena, SS Vermeidung von Wettkampfbedingungen Situationen, bei der zwei oder mehrere Threads auf gemeinsame Daten zugreifen und deren Ergebnisse vom Fortschritt eines Threads abhängen, heißen Wettkampfbedingungen Benötigt wird ein Verfahren zur Gewährleistung eines gegen- seitigen Ausschlusses von Threads Programmteil aus dem auf den gemeinsamen Speicher zugegriffen wird heißt kritischer Bereich Vermeidung von Wettkampfbedingungen: 2 Threads dürfen sich nicht gleichzeitig in kritischen Bereichen aufhalten keine Annahme über relative Geschwindigkeit der Threads kein Threads außerhalb eines kritischen Bereiches darf einen anderen blockieren kein Thread sollte beliebig lange auf den Eintritt in einen kritischen Bereich warten

Dr. Wolfram Amme, Das Thread-Konzept in objektorientierten Programmiersprachen, Informatik II, FSU Jena, SS Synchronisationskonzept: Semaphor Mechanismus zum wechselseitigen Ausschluss und zur Synchronisation von Threads (Dijkstra, 1965) Ein Semaphor ist eine gemeinsam benutzte Integer-Variable S auf die nur die drei Operationen Init, P(asseer) und V(erlaat) zugreifen können P(S): if(S > 0) then S = S-1; else { stoppe ausführenden Thread; trage den Thread in die Warteliste von S ein; } V(S): S = S + 1; if(Warteliste von S !=  ) then { wähle Thread Q aus Warteliste von S; springe zu der P-Operation in Q, durch die Q gestoppt wurde; } System muss atomare Ausführung von P und V garantieren

Dr. Wolfram Amme, Das Thread-Konzept in objektorientierten Programmiersprachen, Informatik II, FSU Jena, SS Anwendung: Semaphor Definition kritischer Abschnitte: Sei S mit 1 initialisiert P(S); { kritischer Abschnitt } V(S); Synchronisation von Threads: Sei S mit 0 initialisiert Thread A Thread B {... {... V(S); P(S); // B wartet auf A...} Initialisierungswert n > 1: Verwaltung kritischer Bereiche, die von n Threads gleichzeitig genutzt werden können

Dr. Wolfram Amme, Das Thread-Konzept in objektorientierten Programmiersprachen, Informatik II, FSU Jena, SS Beispiel: Producer und Consumer Threads abc cde efg Puffer out = 1 in = 4 Consumer Producer

Dr. Wolfram Amme, Das Thread-Konzept in objektorientierten Programmiersprachen, Informatik II, FSU Jena, SS Beispiel: Producer und Consumer Threads Semaphore nichtvoll = 5, // Puffer ist nicht voll, initialisiert mit Puffergröße 5 nichtleer = 0, // Puffer ist nicht leer gesperrt = 1; // Puffer wird gelesen oder beschrieben Producer: do{ Erzeuge Datum; P(nichtvoll); P(gesperrt); Lege Datum im Puffer ab; V(gesperrt); V(nichtleer); } until true; Consumer: do{ P(nichtleer); P(gesperrt); Nimm Datum aus Puffer; V(gesperrt); V(nichtvoll); Verbrauche Datum; } until true;

Dr. Wolfram Amme, Das Thread-Konzept in objektorientierten Programmiersprachen, Informatik II, FSU Jena, SS Probleme bei Semaphoren Falsche oder missbräuchliche Anwendung durch den Programmierer V(S);P(S);... P(S); Auftreten von Verklemmungen (Deadlocks) P(S 1 ); P(S 2 ); P(S 2 ); P(S 1 );... V(S 2 ); V(S 1 ); V(S 1 ); V(S 2 ); Verklemmungen können durch Anforderung aller Semaphore vor Eintritt in den kritischen Bereich vermieden werden

Dr. Wolfram Amme, Das Thread-Konzept in objektorientierten Programmiersprachen, Informatik II, FSU Jena, SS Synchronisationskonzept: Monitor Semaphormechanismen für wechselseitigen Ausschluss und Synchronisation werden in einem Monitor (Hoare, Hansen) gekapselt Monitor ist ein abstrakter Datentyp mit der zusätzlichen Eigenschaft des wechselseitigen Ausschluss Bedingungsvariablen S mit denen über wait(S) und notify(S) zugegriffen werden kann Deklaration gemeinsamer Variablen Deklaration von Operationen Initialisierungscode Eingabeschlange für Threads

Dr. Wolfram Amme, Das Thread-Konzept in objektorientierten Programmiersprachen, Informatik II, FSU Jena, SS Monitore in Java Ein Monitor ist die Kapselung eines kritischen Bereiches mit Hilfe einer automatisch verwalteten Sperre jedes von der JVM angelegte Objekt verfügt über eine Sperre Schlüsselwort synchronized markiert Methoden in einer Klasse für die ein Thread vor Ausführung die Sperre verlangen muß class SpeechSynthesizer{ synchronized void say(String words){ // Speak } Sperre wird immer von einem Objekt angefordert nicht statische Methode => Objekt mit dem die Methode aufgerufen wird statische Methode => Class-Objekt der entsprechenden Klasse

Dr. Wolfram Amme, Das Thread-Konzept in objektorientierten Programmiersprachen, Informatik II, FSU Jena, SS Beispiel 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; } Aufruf von sumRow() oder setRow() über ein Objekt a verlangt jeweils die Sperre von Objekt a

Dr. Wolfram Amme, Das Thread-Konzept in objektorientierten Programmiersprachen, Informatik II, FSU Jena, SS Beispiel class SpreadSheet { static int cellA1, cellA2, cellA3; synchronized static int sumRow() { return cellA1 + cellA2 + cellA3; } synchronized static void setRow(int a1, int a2, int a3){ cellA1 = a1; cellA2 = a2; cellA3 = a3; } Aufruf von sumRow() oder setRow() verlangt jeweils die Sperre von dem Class-Objekt der Klasse SpreadSheet

Dr. Wolfram Amme, Das Thread-Konzept in objektorientierten Programmiersprachen, Informatik II, FSU Jena, SS Synchronisation von Blöcken Schlüsselwort synchronized kann für Blöcke verwendet werden Angabe eines Objektes, dessen Sperre verwendet werden soll synchronized (myObject){ // Anweisungsblock der synchronisiert werden muß... } synchronized void myMethod(){ void myMethod(){... synchronized (this){ }... } Synchronisation von Blöcken oder Methoden verschiedener Klassen

Dr. Wolfram Amme, Das Thread-Konzept in objektorientierten Programmiersprachen, Informatik II, FSU Jena, SS Freigabe von Sperren wait() und notify() erweitern Synchronisationsmechanismen Methodenaufruf wait() bewirkt: Thread beendet Bearbeitung eines synchronisierten Blocks und geht in den “schlafenden” Zustand Sperre für den synchronisierten Block wird freigegeben Methodenaufruf notify() bewirkt: mit wait() in den schlafenden Zustand versetzter Thread, kann wieder die Sperre des entsprechenden Objektes anfordern notify() aufrufender Thread beendet normal die Ausführung auf dem synchronisierten Block “aufgeweckter” Thread kann (muß aber nicht) als nächstes die Sperre erhalten und führt dann die Bearbeitung fort überladene Version der wait-Methode und notifyAll()-Methode

Dr. Wolfram Amme, Das Thread-Konzept in objektorientierten Programmiersprachen, Informatik II, FSU Jena, SS Beispiel class MyThing { synchronized void waiterMethod() { // Ausführung irgendwelche Sachen wait(); // Weiterbearbeitung der Methode } synchronized void notifierMethod() { // Ausführung irgendwelcher Sachen notify(); // Weitere Arbeiten werden ausgeführt werden } synchronized void relatedMethod(){ // Ausführung irgendwelcher Arbeiten }

Dr. Wolfram Amme, Das Thread-Konzept in objektorientierten Programmiersprachen, Informatik II, FSU Jena, SS Beispiel: Producer und Consumer Threads class Producer extends Threads{ static final int MAXQUEUE = 5; private Vector messages = new Vector(); public void run(){ try{ while(true){ putMessage(); sleep( 1000); } catch (InterruptedException e){ } }...

Dr. Wolfram Amme, Das Thread-Konzept in objektorientierten Programmiersprachen, Informatik II, FSU Jena, SS Beispiel: Producer und Consumer Threads... private sychronized void putMessage() throws InterruptedException{ while( message.size == MAXQUEUE) wait(); message.addElement( new java.util.Date().toString()); notify(); } public synchronized String getMessage() throws InterruptedException { notify(); while( messages.size() == 0 )wait(); String.message = (String) messages.firstElement(); messages.removeElement( message ); return message; }

Dr. Wolfram Amme, Das Thread-Konzept in objektorientierten Programmiersprachen, Informatik II, FSU Jena, SS Beispiel: Producer und Consumer Threads class Consumer extends Threads { Producer producer; Consumer( Producer p){ producer = p; } public void run() { try { while( true ){ String message = producer.getMessage(); System.out.println(´´Got message: ´´ + message); sleep( 2000 ); } } catch ( InterruptedException e ) { } }

Dr. Wolfram Amme, Das Thread-Konzept in objektorientierten Programmiersprachen, Informatik II, FSU Jena, SS Rechnerkernvergabe Rechnerkernvergabe (Scheduler) entscheidet welcher der lauffähigen Threads den Rechnerkern zugewiesen bekommt Rechnerkernvergabe sollte garantieren, dass jeder Thread einen gerechten Anteil an der CPU erhält die CPU zu 100 Prozent ausgelastet wird die Antwortzeit für interaktive Benutzer minimiert wird die Anzahl der bearbeiteten Aufträge pro Stunde maximiert werden Hauptproblem: Laufzeitverhalten der im System befindlichen Threads kann nicht vorausgesagt werden Rechnerkernvergabestrategien können in verdrängende und nicht verdrängende Strategien (non preemptive und preemptive scheduling) unterteilt werden

Dr. Wolfram Amme, Das Thread-Konzept in objektorientierten Programmiersprachen, Informatik II, FSU Jena, SS Nicht verdrängende Rechnerkernvergabestrategien FIFS-Strategie: Threads erhalten den Prozessor in der Reihenfolge ihres Eintretens in die Liste `rechenwillig´ Prioritätengesteuerte Rechnerkernvergabe: Warteschlangen Priorität RK Warteschlange ACEB AE B C

Dr. Wolfram Amme, Das Thread-Konzept in objektorientierten Programmiersprachen, Informatik II, FSU Jena, SS Verdrängende Strategien: Round-Robin-Verfahren jedem Thread wird eine Zeitscheibe zugewiesen, innerhalb welcher er laufen darf Umschalten der CPU Zeitscheibe ist abgelaufen Thread terminiert oder wird blockiert Rechnerkernvergabe verwaltet Liste rechenwilliger Threads – Zeitscheibe abgelaufen  Einfügen am Ende der Liste Festlegen der Dauer einer Zeitscheibe kleine Zeitscheibe  geringe Effizienz der CPU durch viele Kontextumschaltungen große Zeitscheibe  schlechte Antwortzeiten für interaktive Anforderungen Zeitscheibe um 100 ms ist häufig ein vernünftiger Kompromiss

Dr. Wolfram Amme, Das Thread-Konzept in objektorientierten Programmiersprachen, Informatik II, FSU Jena, SS Prioritätengesteuertes Round-Robin-Verfahren Priorität hoch tief innerhalb der nach Prioritäten geordneten Warteschlangen wird das Round-Robin-Verfahren angewandt

Dr. Wolfram Amme, Das Thread-Konzept in objektorientierten Programmiersprachen, Informatik II, FSU Jena, SS Methoden zur Rechnerkernvergabe in Java Prioritätengesteuerte Rechnerkernvergabe Rechnerkernabgabe sleep(), wait(), yields() und stop()