Thread Synchronisation in JAVA

Slides:



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

der Universität Oldenburg
Vertieferseminar Geoinformation WS 02/03
10.2 Wechselseitiger Ausschluss in Hardware
Beim Start eines Prozesses in Windows NT, 2000 wird a der Programmtext aus der exe-Datei ab der dort angegebenen Adresse gespeichert.
Kritische Betrachtung
PKJ 2005/1 Stefan Dissmann Vorwoche - Klasse public class Studierende { private String name, vorname, studiengang; private int matNr, semester; private.
Kapselung , toString , equals , Java API
(kleine!) Java Einführung Mittwoch, Heute Ziel: erstes Java-Programm erstellen Von der Aufgabenstellung bis zur Lösung Grundlagen Einfache.
Imperative Programmierung -Entwicklungswerkzeuge
Semaphore void Passieren (semaphore &s) { if (s > 0) { s--;
On a Buzzword: Hierachical Structure David Parnas.
Kapitel 6.1 Nebenläufigkeit und wechselseitiger Ausschluss
Ausnahmen HS Merseburg (FH) WS 06/07.
Java: Dynamische Datentypen
Indirekte Adressierung
FH-Hof Sockets in Java Richard Göbel. FH-Hof Kommunikation über das Internet - Grundlagen Ein Rechner wird im Internet über die so genannte IP- Adresse.
Java: Referenzen und Zeichenketten
Nebenläufige Programmierung
Klassenvariable (auch Klassendaten bzw. statische Attribute genannt) und statische Methoden.
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,
Polymorphie (Vielgestaltigkeit)
Polymorphie (Vielgestaltigkeit)
Objekte und Arbeitsspeicher
FOR Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
Dynamischer Speicher. In einer Funktion wird z.B. mit der Deklaration int i; Speicher auf dem sogenannten Stack reserviert. Wenn die Funktion verlassen.
DO...WHILE Anweisung.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard.
Vererbung Spezialisierung von Klassen in JAVA möglich durch
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 Klassen und Objekte
EDV Parallelprogrammierung1 Parallelprogrammierung mit JAVA.
Einführung in die Programmierung Klassendefinition und Objekte
Informatikunterricht mit Java
Modellierung von Transaktionen Zur Formalisierung der ACID-Garantien muss Verhalten von Transaktionen modelliert werden. Folge aus der Forderung nach lokaler.
Java Threads Sebastian Werler
IT2 – WS 2005/20061Oct 10, 2005 Externes Verhalten – Quelltext (source code) Durch Aufrufe der Konstruktoren und Methoden kann das externe Verhalten (=die.
Eine Implementierung einer effiziente externe geordnete (!) lineare Liste Operationen: Search(x) Insert(x) Delete(x)
EPROG Tutorium Einheit 4 Klassen und Objekte. Wiederholung Schleifen do... while while for break/continue Strings String char Methoden für Strings Arrays.
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
Informatik Zustandsorientiertes Modellieren und Programmieren 2.4 Datenkapselung 2.4 Datenkapselung Objekte können miteinander kommunizieren, indem.
2. Zustandsorientiertes Modellieren 2.4 Datenkapselung
Variablenkonzept Klassisch, in Java Basistyp
Unterprogramme in JAVA
Betriebssysteme Übung 2. Tutorium. Task 1 – Locks (1) Wozu Locks? Dienen dazu, exklusiven Zugriff auf eine Ressource sicherzustellen Lock = binäre Semaphore.
Objectives Verstehen was unterDelegate verstanden wird
Die Architektur der Java-VM
Wilfried Imrich CuP - Java Erste Vorlesung Entspricht ungefähr Kapitel 1.1 des Skriptums Wilfried Imrich Montanuniversität Leoben Freitag, 4. Oktober 2002.
Letzte Chance!!! Exceptions Thread, Runnable Synchronized Wait, notify, notifyAll Thread States Semaphoren JCSP Swing JOMP Linearizability History Amdahl‘s.
Parallelisierung für Multiprozessor-Maschinen Teil 2.
Parallelisierung für Multiprozessor-Maschinen
Mehrbenutzerzugriff auf GIS-Daten
Threads in Java Wiederholung der BS Grundlagen Alois Schütte AOSD1.
3. Beschreibung von Abläufen durch Algorithmen 3.4 Zufall
Alois Schütte Advanced System Programming 2 Interprozeßkommunikation  2.1 JVM Ablaufumgebung  2.2 Java Native Interface (JNI)  Verwendung von.
7.2.4 Klassifikation mobilen Codes Nicht vergessen:  Sowohl das Fernkopieren als auch die Migration von Objekten setzt voraus, daß der Code entweder am.
Übung Informatik I exercise01. 2 Inhaltsübersicht Nachbesprechung Übung 1 Individuelle Fragen/Bemerkungen.
2.3 Implementierung von Prozessen
Threads in Java Threads  Sprachumfang von Java Der Java-Standard fordert nur die Unterstützung von Thread-Prioritäten. Es gibt keine Forderung bzgl.:
Parallel Programming Semaphores / Reader - Writer - Lock
Christos, Kornelia, Jan Christos, Kornelia, Jan Entwicklungsumgebung Versteht unseren Java Programm Code Versteht unseren Java Programm.
, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, WS 2005/06 1 Beispiel class SpreadSheet { int cellA1, cellA2, cellA3; synchronized.
Tutorium Software-Engineering SS14 Florian Manghofer.
© 2008 TravelTainment The Amadeus Leisure Group Thread-Programmierung im Qt-Framework Von: Simon Lubberich Erstbetreuer:
, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Synchronisation mit Monitoren Threads können in Java parallel ablaufen, oft.
Der kritische Abschnitt
Implementieren von Klassen
 Präsentation transkript:

Thread Synchronisation in JAVA 0055060, Angelika Brückl

Überblick - Interne Architektur der JVM

Thread Synchronisation und Monitore (1) Objekt, das einen Thread blockieren und von der Verfügbarkeit einer Ressource benachrichtigen kann „Gebäude“ mit drei Räumen „Eingangshalle“ Thread erreicht Anfang des gegenseitigen Ausschlusses „Behandlungsraum“ gegenseitiger Ausschluss wird behandelt „Warteraum“ Wartepause bei Kooperation „Eingangshalle“ „Behandlungsraum“ „Warteraum“

Thread-Synchronisation und Monitore (2) Gegenseitiger Ausschluss (mutual exclusion) Mehrere Threads arbeiten exklusiv mit gemeinsamen Daten Unterstützt mittels Object Locks Kooperation Mehrere Threads arbeiten in Kooperation zusammen Unterstützt mittels wait und notify Methoden der Klasse object 1. Enter the entry set -> „Gebäude über Eingangshalle betreten“ 2. Acquire the monitor -> „Behandlungsraum betreten u. benützen 3. Release the monitor and enter the wait set -> „Warteraum aufsuchen“ 4. Acquire again a monitor -> „Behandlungsraum wieder benutzen“ 5. Release and exit the monitor -> „Gebäude verlassen“

Thread-Synchronisation und Monitore (3) Critical Regions (kritische Abschnitte) Auszuführender Code hat automare Operation Kein anderer Thread darf den gleichen Monitor zwischenzeitlich benutzen Operation soll entweder ganz oder gar nicht ausgeführt werden Nur die Operationen 1) Enter the entry set und 5) release and exit the monitor sind ausführbar Operation 2) Acquire the monitor nur nach Operation 5) Realease and exit the monitor Thread Scheduling Java verwendet fixen Priority-Scheduling-Algorithmus Thread mit höherer Priorität wird zuerst ausgeführt Theads mit gleicher Priorität werden mit Round-Robin-Verfahren gescheduled – (OS muss time-slicing unterstützen)

Thread-Synchronisation und Monitore (4) Mit dem Schlüsselwort synchronized werden in Java Monitore gekennzeichnet Bytecode: monitorenter (Beginn synchronisierter Code-Block) Anfordern der objectref Durchführung Operation 1) Enter the entry set Durchführung Operation 2) Acquire the monitor, falls kein Thread Owner dieses Monitors ist monitorzähler = monitorzähler + 1 Sonst Einordnung in Entry Set monitorexit (Ende synchronisierter Code-Block) Freigeben der objektref monitorzähler = monitorzähler -1 Durchführung Operation 5) Release and exit the monitor, falls monitorzähler zu Null wird Sonst Durchführung des Operationen 2) Acquire the monitor oder 4) Acquire again the monitor abhängig von den notify-Bedingungen

Interaktion JVM und Speicher (1) - Definitionen Hauptspeicher gemeinsam genutzt von allen Threads zur Speicherung von Variablen (Klassenvariablen, Instanzenvariablen, Komponenten in Arrays) Arbeitsspeicher jeder Thread hat eine Arbeitskopie „seiner“ Variablen (Hauptspeicher hat die Master-Kopie) Lock (Schloss) jedes Objekt hat sein eigenes Schloss Threads konkurrieren um den Erwerb von Locks

Interaktion JVM und Speicher (2) - Definitionen Aktionen eines Threads use überträgt den Inhalt der Arbeitskopie einer Variablen des Threads an die Execution Engine des Threads assign überträgt den Wert der Execution Engine des Threads in die Arbeitskopie des Threads load überträgt einen Wert vom Hauptspeicher (Master-Kopie) durch eine vorgängige read Aktion in die Arbeitskopie des Threads store überträgt den Inhalt der Arbeitskopie des Threads zum Hauptspeicher für eine spätere write Aktion Arbeits-speicher Execution Engine assign use Arbeits-speicher Haupt-speicher load store

Interaktion JVM und Speicher (3) - Definitionen Aktionen eines Threads (Fortsetzung) lock Thread beansprucht ein bestimmtes Schloss (Beginn - Synchronisation zwischen Thread und Hauptspeicher) unlock Thread gibt ein bestimmtes Schloss frei (Ende - Synchronistion zwischen Thread und Hauptspeicher) Aktionen des Hauptspeichers – read, write read überträgt Inhalt der Master-Kopie einer Variablen in die Arbeitskopie des Threads für eine spätere load Aktion write überträgt einen Wert vom Arbeitsspeicher des Threads vermittels einer store Aktion in die Master-Kopie einer Variablen im Hauptspeicher

Interaktion JVM und Speicher (4) - Regeln Alle Aktionen sind atomar Thread-Aktionen use, assign, load, store, lock, unlock Speicher-Aktionen read, write, lock, unlock Alle Aktionen irgendeines Threads eines Speichers für irgendeine Variable eines Speichers für irgendeinen Lock sind total geordnet Threads kommunizieren nicht direkt miteinander, sondern über den gemeinsamen Speicher lock oder unlock – gemeinsam ausgeführt von Thread und Hauptspeicher nach load (Thread) folgt immer read (Hauptspeicher) nach write (Hauptspeicher) folgt immer store (Thread) Alle Beziehungen sind transitiv

Beispiel 1.1 – Elementares Tauschen Klasse mit den Klassen-Variablen a und b und den Methoden hier und da class Beispiel { int a = 1, b = 2; void hier () { a = b; } void da () { b = a; } } write a -> read a, read b -> write b (ha = hb = da = db = ma = mb = 2) read a -> write a, write b ->read b (ha = hb = da = db = ma = mb = 1) read a -> write a, read b -> write b (dann ha = hb = ma = 2, da = db = mb = 1) ha, hb Arbeitskopien hier da, db Arbeitskopien da Masterkopien in Hauptspeicher ma = 1 und mb = 2

Beispiel 1.2 – Synchronisiertes Swap Klasse mit den Klassen-Variablen a und b und den Methoden hier und da unlock class SynBei class SynBeispiel { int a = 1, b = 2; synchronized void hier () { a = b; } synchronized void da () { b = a; } } ha, hb Arbeitskopien hier ha, hb Arbeitskopien da Masterkopien im Hauptspeicher ma = 1 und mb = 2 write a -> read a, read b -> write b (ha = ha = da = db = ma = mb = 2) read a -> write a, write b -> read b (ha = hb = da = db = ma = mb = 1)

Beispiel 2.1 – Ungeordnetes Schreiben Klasse mit den Klassen-Variablen a und b und den Methoden nach und von (die Methode liest beide Variablen und die andere schreibt beide Variablen) class Beispiel { int a = 1, b = 2; void nach() { a = 3; b = 4; } void von() System.out.println(„a=„+ a + „, b=„ +b); } } Ein Thread ruft nach und der andere Thread ruft von auf nach Thread: assign für a assign für b Weil keine Synchronisation: implementierungsabhängig, ob store nach Hauptspeicher (d.h. a = 1 oder 3 und b = 2 oder 4) Mögliche Ausgaben von Thread a=1, b=2 a=1, b=4 a=3, b=4 a=3, b=2

Beispiel 2.2 – Ungeordnetes Schreiben (Fortsetzung) Methode nach ist synchronisiert, aber Methode von ist nicht synchronisiert class Beispiel { int a = 1, b = 2; synchronized void nach() { a = 3; b = 4; } void von() System.out.println(„a=„+ a + „, b=„ +b); } } Ein Thread ruft nach und der andere Thread ruft von auf nach Thread wird forciert store nach Hauptspeicher vor unlock am Ende auszuführen to Thread wird use a und use b in dieser Reihenfolge ausführen und daher load a und load b vom Hauptspeicher laden

Beispiel 2.2 (Fortsetzung) Methode nach ist synchronisiert von ist nicht synchronisiert Methode von kann wie bisher a=1 oder 3 und b=2 oder 4 ausgeben Da Methoden von und nach über a und b kommunizieren, kann read zwischen lock und unlock erfolgen Wenn von und nach synchronisiert sind, dann gilt a=1, b=2 oder a=3, b=4