Nebenläufigkeit in Java
|
|
- Hildegard Becker
- vor 6 Jahren
- Abrufe
Transkript
1 Nebenläufigkeit in Java Prof. Dr. Margarita Esponda Prof. Dr. Margarita Esponda 1
2 Gliederung der Vorlesung - Konzepte der Nebenläufigkeit - Threads in Java - Synchronisationsprobleme - Klassische Lösungen - Semaphoren - Monitore - Lebenszyklus eines Threads Prof. Dr. Margarita Esponda 2
3 Wo finden wir Nebenläufigkeit? Wettersimulation Betriebssysteme Suchmaschinen GUIs Computerspiele Prof. Dr. Margarita Esponda 3
4 Parallelität Echte Parallelität Virtuelle Parallelität Prozesse laufen auf unterschiedlichen CPUs Mehrere Prozesse laufen auf der selben CPU Prozess 1 Prozess 1 Prozess 2 Prozess 2 Prozess 3 Prozess 3 Prozess 3 Prozess 3 Prof. Dr. Margarita Esponda 4
5 Grundlegende Begriffe "single program" In der Steinzeit der PCs durfte man nur einzelne Programme streng sequentiell ausführen. "task switching" Mehrere Programme liegen im Hauptspeicher. Durch Umschaltung setzt man die Ausführung eines der Programme fort. "multitasking" Das Betriebssystem schaltet die Programme um. Man hat das Gefühl, dass mehrere Programme parallel laufen. "multithreading" Es gibt mehrere Programmfäden, die parallel innerhalb eines Programms ausgeführt werden. Prof. Dr. Margarita Esponda 5
6 "Multitasking" vs. "Multithreading" mehrere Prozesse (process) jeder Prozess hat eine eigene Umgebung Kein gemeinsamer Adressraum Verwaltung durch das Betriebssystem mehrere Programmfäden (thread) alle Threads laufen in der gleichen Umgebung gemeinsamer Adressraum!!! Verwaltung innerhalb eines Prozesses Prof. Dr. Margarita Esponda 6
7 Multitasking + Multithreading Prozess 1 Prozess 2 Prozess 3 Thread 1 Thread 2 Adressraum für Prozess 1 Adressraum für Prozess 2 Adressraum für Prozess 3 Prof. Dr. Margarita Esponda 7
8 Multitasking Betriebssystem Prozess 1 Prozess 2 Lokaler Speicher Lokaler Speicher Prozess 3 Lokaler Speicher Gemeinsamer Speicher Prozesse werden direkt vom Betriebssystem verwaltet. Jeder Prozess bekommt einen eigenen Speicherbereich vom Betriebssystem zugeteilt. Prof. Dr. Margarita Esponda 8
9 Multitasking + Multithreading Betriebssystem Prozess 1 Prozess 2 Lokaler Speicher Lokaler Speicher JVM Java Virtuelle Maschine Thread 1 Thread 2 Lokaler Speicher Lokaler Speicher Thread 3 Lokaler Speicher Gemeinsamer Speicherbereich Prof. Dr. Margarita Esponda 9
10 Gliederung der Vorlesung - Konzepte der Nebenläufigkeit - Threads in Java - Synchronisationsprobleme - Klassische Lösungen - Semaphoren - Monitore - Lebenszyklus eines Threads Prof. Dr. Margarita Esponda 10
11 Threads Ausführungsstrang Ein Thread ist ein eigenständiges Programmfragment, das parallel zu anderen Programmfragmenten (Threads) laufen kann. Threads: können die Bedienbarkeit von Dialoganwendungen verbessern, indem rechenintensive Anwendungen im Hintergrund ablaufen. Threads werden auch als leichtgewichtige Prozesse bezeichnet. Prof. Dr. Margarita Esponda 11
12 Threads in Java Ein Programmfaden oder Ausführungsstrang wird durch ein Objekt des Typs Thread repräsentiert. Die Klasse Thread ist eine vollständige Implementierung des Runnable-Interfaces. Das Runnable-Interface stellt Klassen von Objekten die parallel ausführbaren Programmcode beinhalten. public interface Runnable { public abstract void run(); Prof. Dr. Margarita Esponda 12
13 Programmierung von Threads Thread-Klassen können in Java auf zwei verschiedene Arten definiert werden: als Unterklasse der Thread-Klasse public class Counter extends Thread {... public void run() {... Die Methode run() muss überschrieben werden durch Implementierung der Runnable-Schnittstelle public class Counter implements Runnable {... public void run() {... Die Methode run() muss implementiert werden Prof. Dr. Margarita Esponda 13
14 Die Thread-Klasse Thread ( ); // erzeugt ein leeres Thread-Objekt mit // automatisch festgelegtem Namen Thread-N Thread ( String name ); // erzeugt ein leeres Thread-Objekt mit Namenname Thread ( Runnable target ) Einige Konstruktoren // erzeugt zu Runnable-Objektziel ein Thread-Objekt Thread ( Runnable target, String name ) // erzeugt zu Runnable-Objektziel ein Thread-Objekt // mit Namen name Prof. Dr. Margarita Esponda 14
15 Die Thread-Klasse run()-methode Innerhalb der run()-methode befinden sich die potenziell parallel ausführbaren Aktivitäten eines Threads. start() - Methode Startet ein Thread und zwar: - es wird Speicher für den Thread bereit gestellt - und die run-methode wird aufgerufen Prof. Dr. Margarita Esponda 15
16 Beispiel: public class SimpleThread extends Thread { public SimpleThread ( String name ) { super(name); public void run(){ for( int i=0; i<100; i++ ) System.out.print( this.getname() ); public class TestSimpleThread { public static void main( String[] args ){ SimpleThread tanne = new SimpleThread("Anne "); SimpleThread tpeter = new SimpleThread("Peter "); tanne.start(); tpeter.start(); Anne Anne Anne Anne Anne Anne Anne Anne Anne Anne Anne Peter Peter Peter Peter Peter Peter Peter Peter Peter Peter Peter Peter Peter Peter Peter Peter Anne Anne Anne Anne Anne Anne Anne Anne Anne Anne Anne Anne Anne Anne Anne Peter Peter Peter Peter Peter Peter Prof. Dr. Margarita Esponda 16
17 Java-Programm mit Multithreading main... thread1 = new Thread() thread2 = new Thread() thread1.start() thread2.start() maindosomething() mainwork() mainwork() end() thread1.. void run(){ work1() work2() work3() work4() work5() thread2.. void run(){ work1() work2() work3() work4() work5() work6() Zeit Prof. Dr. Margarita Esponda 17
18 weitere wichtige Methoden join() - Methode Um auf die Beendigung eines oder mehrerer Threads zu warten, benutzt man die join() - Methode. sleep(int millis) - Methode Ein Thread kann mit der sleep()-methode für eine vorbestimmte Zeit in den Zustand "not runnable" versetzt werden. Prof. Dr. Margarita Esponda 18
19 Implementierung als Unterklasse von Thread public class SimpleThread extends Thread { int lifetime; public SimpleThread( String name, int lifetime ) { super( name ); this.lifetime = lifetime; public void run() { for ( int i=0; i<lifetime; i++ ) { try { this.sleep( 1000 ); System.out.println( "Ich bin "+this.getname() ); catch ( InterruptedException ie ) System.out.println(ie); Prof. Dr. Margarita Esponda 19
20 public class TestSimpleThread { public static void main( String[] args ) { SimpleThread t1 = new SimpleThread( "Andreas", 5 ); SimpleThread t2 = new SimpleThread( "Hanna", 5 ); SimpleThread t3 = new SimpleThread( "Anne", 3 ); t1.start(); t2.start(); t3.start(); System.out.println( "Ich bin main" ); Ausgabe: Ich bin main Ich bin Andreas Ich bin Hanna Ich bin Anne Ich bin Andreas Ich bin Hanna Ich bin Anne Ich bin Andreas Ich bin Hanna Ich bin Anne Ich bin Andreas Ich bin Hanna Ich bin Andreas Ich bin Hanna main t1 t2 t3 t1 t2 t3 t1 t2 t3 t1 t2 t1 t2 Prof. Dr. Margarita Esponda 20
21 public class TestSimpleThread { public static void main( String[] args ) { SimpleThread t1 = new SimpleThread( "Andreas", 5 ); SimpleThread t2 = new SimpleThread( "Hanna", 5 ); t1.start(); t2.start(); try { Thread-Beispiel t1.join(); // Warte auf den 1.Thread t2.join(); // Warte auf den 2.Thread catch ( InterruptedException ie ) { System.out.println( ie ); System.out.println( "Ich bin main" ); // end of main // end of class Ich bin Andreas Ich bin Hanna Ich bin Andreas Ich bin Hanna Ich bin Andreas Ich bin Hanna Ich bin Andreas Ich bin Hanna Ich bin Andreas Ich bin Hanna Ich bin main t1 t2 t1 t2 t1 t2 t1 t2 t1 t2 main Prof. Dr. Margarita Esponda 21
22 Implementierung der Runnable-Schnittstelle public class SimpleRunnable implements Runnable { // Instanzvariablen int lifetime; Thread thread; public SimpleRunnable( String name, int lifetime ) { this.thread = new Thread( this, name ); this.lifetime = lifetime; public void run() { for ( int i=0; i<this.lifetime; i++ ) { System.out.println( "Ich bin "+this.thread.getname() ); // end of run // end of class Prof. Dr. Margarita Esponda 22
23 Implementierung der Runnable-Schnittstelle public class TestSimpleRunnable { public static void main( String[] args ) { SimpleRunnable t1 = new SimpleRunnable( "Peter", 6 ); SimpleRunnable t2 = new SimpleRunnable( "Hanna", 6 ); Thread t1.thread.start(); t2.thread.start(); System.out.println( " Ich bin am Ende " ); // end of main // end of class Ausgabe: Ich bin am Ende Ich bin Peter Ich bin Hanna Ich bin Peter Ich bin Hanna Ich bin Peter Ich bin Hanna Ich bin Peter Ich bin Hanna Ich bin Peter Ich bin Hanna Ich bin Peter Ich bin Hanna main t1 t2 t1 t2 t1 t2 t1 t2 t1 t2 t1 t2 Prof. Dr. Margarita Esponda 23
24 public class TestSimpleRunnable { join()-methode public static void main( String[] args ) { SimpleRunnable t1 = new SimpleRunnable( "Peter", 6 ); SimpleRunnable t2 = new SimpleRunnable( "Hanna", 6 ); Ausgabe: Thread t1.thread.start(); t2.thread.start(); try { t1.thread.join(); t2.thread.join(); catch ( InterruptedException ie ) { System.out.println( ie ); System.out.println( " Ich bin am Ende " ); // end of main // end of class Ich bin Peter Ich bin Hanna Ich bin Peter Ich bin Hanna Ich bin Peter Ich bin Hanna Ich bin Peter Ich bin Hanna Ich bin Peter Ich bin Hanna Ich bin Peter Ich bin Hanna Ich bin am Ende t1 t2 t1 t2 t1 t2 t1 t2 t1 t2 t1 T2 main Prof. Dr. Margarita Esponda 24
25 Weitere Klassenmethoden der "Thread"-Klasse public class Thread implements Runnable { /* Methoden */... static int activecount() static Thread currentthread() static boolean holdslock(object obj) static boolean interrupted() static void setdefaultuncaughtexceptionhandler... ( Thread.UncaughtExceptionHandler eh ) Prof. Dr. Margarita Esponda 25
26 weitere Instanzmethoden der "Thread"-Klasse public class Thread implements Runnable { /* Methoden */... int getpriority() String getname() long getid() boolean isalive( ) void setdaemon(boolean on) void setname(string name) void setpriority(int newpriority) StackTraceElement[] getstacktrace() Thread.State getstate()... Prof. Dr. Margarita Esponda 26
27 Es gibt kein Java-Programm ohne Threads. Betriebssystem Betriebssystem Java-Anwendung garbage collector Browser garbage collector main-thread Java-Applet Java-Applet GUI setvisible(true) init-thread init-thread event-dispatcher Prof. Dr. Margarita Esponda 27
28 Gliederung der Vorlesung - Konzepte der Nebenläufigkeit - Threads in Java - Synchronisationsprobleme - Klassische Lösungen - Semaphoren - Monitore - Lebenszyklus eines Threads Prof. Dr. Margarita Esponda 28
29 Was ist das Problem mit Threads? - es ist sehr einfach Threads in Java zu programmieren - es ist schwer Threads ohne Fehler zu programmieren! Was geschieht, wenn Threads gemeinsame Variablen oder Ressourcen benutzen? Prof. Dr. Margarita Esponda 29
30 Threads mit gemeinsamen Daten T1 T2 public void run(){.. x = x + 1; y = y + 1; paint();. public void run(){.. x = x * 2; y = y * 2; paint();. x=y T1: x = x + 1; x = x * 2; T2: y = y * 2; T2: paint(); T2: T1: y = y + 1; 3, 3 4, 3 8, 3 8, 6 8, 6 8, 7 x=y? Prof. Dr. Margarita Esponda 30
31 Synchronisationsprobleme public class Asynchron extends Thread { public static int zaehler = 0; Klassenvariable Gemeinsame Variable für alle Objekte der Klasse Asynchron. public void run() { while ( zaehler<25 ) { zaehler++; System.out.print( this + " " ); System.out.println( zaehler ); public static void main( String args[] ) { Thread t1 = new Asynchron(); Thread t2 = new Asynchron(); t1.start(); t2.start(); Prof. Dr. Margarita Esponda 31
32 Synchronisationsprobleme zaehler 0 t1 public void run() { while ( zaehler<25 ) { zaehler++; System.out.print( this + " " ); System.out.println( zaehler ); t2 public void run() { while ( zaehler<25 ) { zaehler++; System.out.print( this + " " ); System.out.println( zaehler ); Prof. Dr. Margarita Esponda 32
33 Synchronisationsprobleme zaehler 678 t0 public void run() { while ( zaehler<25 ) { zaehler++; System.out.print( this + " " ); System.out.println( zaehler ); t1 public void run() { while ( zaehler<25 ) { zaehler++; System.out.print( this + " " ); System.out.println( zaehler ); Prof. Dr. Margarita Esponda 33
34 Synchronisationsprobleme Thread[Thread-0,5,main] 1 Thread[Thread-0,5,main] 2 Thread[Thread-0,5,main] 3 Thread[Thread-0,5,main] 4 Thread[Thread-0,5,main] 5 Thread[Thread-0,5,main] 6 Thread[Thread-1,5,main] Thread[Thread-0,5,main] 8 8 Thread[Thread-0,5,main] 9 Thread[Thread-0,5,main] 10 Thread[Thread-0,5,main] 11 Thread[Thread-0,5,main] 12 Thread[Thread-0,5,main] 13 Thread[Thread-0,5,main] 14 Thread[Thread-0,5,main] 15 Thread[Thread-0,5,main] 16 Thread[Thread-0,5,main] 17 Thread[Thread-0,5,main] 18 Thread[Thread-0,5,main] Thread[Thread-1,5,main] Thread[Thread-0,5,main] Thread[Thread-1,5,main] Thread[Thread-0,5,main] Thread[Thread-1,5,main] 24 Thread[Thread-0,5,main] 25 Prof. Dr. Margarita Esponda 34
35 Synchronisationsprobleme zaehler 24 t0 public void run() { while ( zaehler<25 ) { zaehler++; System.out.print( this + " " ); System.out.println( zaehler ); t1 public void run() { while ( zaehler<25 ) { zaehler++; System.out.print( this + " " ); System.out.println( zaehler ); Prof. Dr. Margarita Esponda 35
36 Synchronisationsprobleme zaehler 24 t0 public void run() { while ( zaehler<25 ) { zaehler++; System.out.print( this + " " ); System.out.println( zaehler ); t1 public void run() { while ( zaehler<25 ) { zaehler++; System.out.print( this + " " ); System.out.println( zaehler ); Prof. Dr. Margarita Esponda 36
37 Synchronisationsprobleme zaehler 24 t0 public void run() { while ( zaehler<25 ) { zaehler++; System.out.print( this + " " ); System.out.println( zaehler ); t1 public void run() { while ( zaehler<25 ) { zaehler++; System.out.print( this + " " ); System.out.println( zaehler ); Prof. Dr. Margarita Esponda 37
38 Synchronisationsprobleme zaehler 24 t0 public void run() { while ( zaehler<25 ) { zaehler++; System.out.print( this + " " ); System.out.println( zaehler ); t1 public void run() { while ( zaehler<25 ) { zaehler++; System.out.print( this + " " ); System.out.println( zaehler ); Prof. Dr. Margarita Esponda 38
39 Synchronisationsprobleme zaehler t0 public void run() { while ( zaehler<25 ) { zaehler++; System.out.print( this + " " ); System.out.println( zaehler ); t1 public void run() { while ( zaehler<25 ) { zaehler++; System.out.print( this + " " ); System.out.println( zaehler ); Prof. Dr. Margarita Esponda 39
40 Lösung: Wechselseitiger Ausschluss muss gewährleistet werden. T1 T2 public void run(){.. x = x + 1; y = y + 1; paint();. Kritischer Abschnitt public void run(){.. x = x * 2; y = y * 2; paint();. Kritischer Abschnitt nur ein Thread im kritischen Abschnitt Prof. Dr. Margarita Esponda 40
41 Kritische Abschnitte Wechselseitiger Ausschluss muss gewährleistet werden, wenn gemeinsame Ressourcen benutzt werden. kritischer Abschnitt Prof. Dr. Margarita Esponda 41
42 Typisches Beispiel: Drucker-Spooler simultaneous peripheral operations on line QTail Erster freier Platz der Warteschlange Thread A... adr = liest QTail speichert Datei in adr inkrementiert QTail... Thread B... adr = liest QTail speichert Datei in adr inkrementiert QTail... Prof. Dr. Margarita Esponda 42
43 Klassisches Beispiel in der Literatur: Drucker-Spooler simultaneous peripheral operations on line QTail =4 Unterbrechung Thread A... adr = liest QTail speichert Datei in adr inkrementiert QTail... Thread B... adr = liest QTail speichert Datei in adr inkrementiert QTail... Unterbrechung Prof. Dr. Margarita Esponda 43
44 Typisches Beispiel: Drucker-Spooler simultaneous peripheral operations on line Fehler! QTail Thread A Thread B Unterbrechung adr = liest QTail speichert Datei in adr inkrementiert QTail... adr = liest QTail speichert Datei in adr inkrementiert QTail... Kritischer Abschnitt Unterbrechung Prof. Dr. Margarita Esponda 44
45 Gliederung der Vorlesung - Konzepte der Nebenläufigkeit - Threads in Java - Synchronisationsprobleme - Klassische Lösungen - Semaphoren - Monitore - Lebenszyklus eines Threads Prof. Dr. Margarita Esponda 45
46 Kritische Abschnitte Kritische Abschnitte sind die Teile des Programms, in denen auf gemeinsam benutzten Speicher bzw. Ressourcen zugegriffen werden kann. Wechselseitiger Ausschluss muss gewährleistet werden. Wie? 1. Unterbrechungen ausschalten 2. Variablen sperren 3. Strikter Wechsel 4. Petersons Lösung 5. Die TSL- Anweisung Prof. Dr. Margarita Esponda 46
47 1. Unterbrechungen ausschalten disable_interrupts(); kritischer_abschnitt(); enable_interrupts(); Jedoch: Benutzerprozesse sollten nicht die Macht haben, alle Unterbrechungen auszuschalten. Die Ausschaltung von Unterbrechungen ist ein Privileg des Betriebssystems. Nicht geeignet als Ausschlussmechanismus für Benutzerprozesse. Prof. Dr. Margarita Esponda 47
48 2. Variablen sperren Nehmen wir an, zwei Threads möchten eine Warteschlange gemeinsam benutzen. Warteschlange Sperre = 01 Wenn Sperre = 0, ist die Warteschlange gesperrt Wenn Sperre = 1, ist die Warteschlange nicht gesperrt Die Prozesse benutzen wiederum eine gemeinsame Variable, um den Zugriff auf die Warteschlange zu synchronisieren. Prof. Dr. Margarita Esponda 48
49 2. Variablen sperren Warteschlange Sperre = 01 Thread A Thread B if (Sperre == 0) Interrupt if (Sperre == 0) Sperre = 1; Sperre = 1; kritischer kritischer Abschnitt wird ausgeführt else warten... Beide Prozesse können in ihren kritischen Bereich gleichzeitig eintreten. Abschnitt wird ausgeführt else warten... Interrupt Prof. Dr. Margarita Esponda 49
50 3. Strikter Wechsel Warteschlange turn = 01 while ( true ) { while ( turn!= 0 ); critical_region(); turn = 1; noncritical_region(); while ( true ) { while ( turn!= 1 ); critical_region(); turn = 0; noncritical_region(); Thread 0 Thread 1 Prof. Dr. Margarita Esponda 50
51 3. Strikter Wechsel Warteschlange turn = 01 while ( true ) { while ( turn!= 0 ); critical_region(); turn = 1; noncritical_region(); while ( true ) { while ( turn!= 1 ); critical_region(); turn = 0; noncritical_region(); Thread 0 Thread 1 Prof. Dr. Margarita Esponda 51
52 3. Strikter Wechsel Warteschlange turn = 1 Erst wenn Thread 1 wieder in seinem kritischen Abschnitt gewesen ist, darf Thread 0 seinen kritischen Abschnitt wieder betreten. Leider erfordert diese Lösung einen strikten Wechsel zwischen den Prozessen. while ( true ) { while ( turn!= 0 ); critical_region(); turn = 1; noncritical_region(); while ( true ) { while ( turn!= 1 ); critical_region(); turn = 0; noncritical_region(); Thread 0 Thread 1 Prof. Dr. Margarita Esponda 52
53 4. Petersons Lösung für zwei Prozesse public class PetersonThread extends Thread { static int turn = 0; static boolean[] ready = { false, false ; int id, other; public PetersonThread( int id ){ this.id = id; this.other = 1-id; public void run() { while(true){ ready[id] = true; turn = other; while( ready[other] && turn==other ); critical_region(); ready[id]=false; noncritical_region(); Prof. Dr. Margarita Esponda 53
54 4. Petersons Lösung für zwei Prozesse 0 1 ready false false turn = 0 public void run() { while ( true ) { ready[0] = true ; turn = 1; while(ready[1] && turn==1); { //kritischer Abschnitt ready[0] = false; { //Rest des Programms public void run() { while ( true ) { ready[1] = true ; turn = 0; while(ready[0] && turn==0); { //kritischer Abschnitt ready[1] = false; { //Rest des Programms Thread 0 Thread 1 Prof. Dr. Margarita Esponda 54
55 5. TSL-Anweisung Lösung mit Hardware-Unterstützung. Insbesondere Mehrprozessorrechner haben TSL- Anweisungen. TSL RX, LOCK Test and Set Lock Wenn die CPU eine TSL-Anweisung im Speicher ausführt, wird der Speicherbus gesperrt, bis er fertig ist. Prof. Dr. Margarita Esponda 55
56 Peterson + TSL-Anweisung Prioritätsumkehrproblem flag 0 1 false false turn = 0 P 0 hat eine höhere Priorität while ( true ) { flag[0] = true ; turn = 1; while(flag[1] && turn==1); { //kritischer Abschnitt flag[0] = false; { //Rest des Programms P 1 hat eine niedrigere Priorität while ( true ) { flag[1] = true ; turn = 0; while(flag[0] && turn==0); { //kritischer Abschnitt flag[1] = false; { //Rest des Programms Prof. Dr. Margarita Esponda 56
57 Peterson + TSL-Anweisung Prioritätsumkehrproblem flag 0 1 true true turn = 1 P 0 hat eine höhere Priorität while ( true ) { flag[0] = true ; turn = 1; while(flag[1] && turn==1); { //kritischer Abschnitt flag[0] = false; { //Rest des Programms P 1 hat eine niedrigere Priorität while ( true ) { flag[1] = true ; turn = 0; while(flag[0] && turn==0); { //kritischer Abschnitt flag[1] = false; { //Rest des Programms Prof. Dr. Margarita Esponda 57
58 Peterson + TSL-Anweisung Der Peterson-Algorithmus und die TSL-Lösung haben den Nachteil, dass aktives Warten erforderlich ist. Probleme 1. CPU-Zeit Verschwendung 2. Prioritätsumkehrproblem Prioritätsumkehrproblem Obwohl P 0 eine höhere Priorität als P 1 hat, muss er immer länger als P 1 warten, um in seinen kritischen Abschnitt eintreten zu können. Prof. Dr. Margarita Esponda 58
59 Schlafen und Aufwecken Sleep und Wakeup Eine Alternative zum aktiven Warten ist: Schlafen gehen, anstatt CPU-Zeit zu verschwenden. Aber ein schlafender Prozess kann sich selber nicht aufwecken. D.h. er braucht einen entsprechenden Partner, der ihn wieder aufweckt. Prof. Dr. Margarita Esponda 59
60 Gliederung der Vorlesung - Konzepte der Nebenläufigkeit - Threads in Java - Synchronisationsprobleme - Klassische Lösungen - Semaphoren - Monitore - Lebenszyklus eines Threads Prof. Dr. Margarita Esponda 60
61 Semaphoren Semaphoren sind eine der wichtigsten Datenstrukturen, die für die Synchronisation von Prozessen in fast allen Betriebssystemen zur Verfügung gestellt werden. Semaphoren als eine Lösung für Prozesssynchronisation wurde von Edsger W. Dijkstra 1965 konzipiert. Semaphoren haben folgende Komponenten: - ein Zähler - eine acquire-operation - eine release-operation Prof. Dr. Margarita Esponda 61
62 Semaphoren Der Inhalt der Semaphoren wird nur mit Hilfe der Operationen acquire und release verändert. Die aquire- und release-operationen sind atomare Operationen, die einen Thread eventuell wecken oder zum Schlafen schicken. Prof. Dr. Margarita Esponda 62
63 Lösung mit Semaphoren Ab Java 1.5 ist eine Semaphor-Klasse in dem Paket java.util.concurrent enthalten. Allgemeine Verwendung eines einfachen binären Semaphors oder mutex. Semaphore sem = new Semaphore(1);... public void run(){... sem.acquire(); kritische_abschnitt(); sem.release(); Prof. Dr. Margarita Esponda 63
64 Probleme mit Semaphoren Folgende einfache Fehler werden oft vom Programmierer gemacht: s.release();... // Kritischer Abschnitt... s.acquire(); s.acquire();... // Kritischer Abschnitt... s.acquire(); Mehrere Threads können in den kritischen Abschnitt eintreten. Ein Deadlock findet innerhalb des Threads statt. Prof. Dr. Margarita Esponda 64
65 Probleme mit Semaphoren Folgende Fehler sind im Programm schwer zu erkennen, weil die Probleme nur bei bestimmten Ausführungssequenzen auftreten. T 0 T 1 T0: S1.acquire(); S1.acquire(); S2.acquire(); T1: S2.acquire(); S2.acquire(); S1.acquire(); T0: S2.acquire(); Wartet!.... T1: S1.acquire(); Wartet!.. S2.release(); S1.release(); S1.release(); S2.release(); Verklemmung! Prof. Dr. Margarita Esponda 65
66 Deadlocks Ein Deadlock oder Verklemmung ist ein Zustand, bei dem mindestens zwei Prozesse auf Ressourcen warten, die einem anderen beteiligten Prozess zugeteilt sind und nicht mehr frei gegeben werden können. Klassisches Beispiel: Prof. Dr. Margarita Esponda 66
67 Gliederung der Vorlesung - Konzepte der Nebenläufigkeit - Threads in Java - Synchronisationsprobleme - Klassische Lösungen - Semaphoren - Monitore - Lebenszyklus eines Threads Prof. Dr. Margarita Esponda 67
68 Monitore Sind abstrakte Datentypen (ADT) Gemeinsame Daten T a T b T c T d Nur durch die Operationen des Monitors dürfen die inneren Daten geändert werden. Ein Monitor garantiert gegenseitigen Ausschluss des Zugriffs auf die Daten innerhalb des Monitors.... Operationen Nur ein Thread darf zu einem bestimmten Zeitpunkt innerhalb des Monitors aktiv sein. Prof. Dr. Margarita Esponda 68
69 Monitore Nur ein Thread darf zu einem bestimmten Zeitpunkt innerhalb des Monitors aktiv sein. Das Objekt ist blockiert T 3 T 2 T 4 T 8 T 1 T o Besitzer des Objektes Monitore können in Java als Klassen mit synchronized- Methoden und geeigneter Verwendung der wait-, notify- und notifyall-methoden realisiert werden. Prof. Dr. Margarita Esponda 69
70 Das synchronized-schlüsselwort in Java... synchronized (Objektvariable) { In Java ist jede Instanz der Klasse java.lang.object mit einer Sperrvariable verknüpft. Diese Sperre entspricht einem booleschen Semaphor. Beispiel:... synchronized ( nums ) { for ( int i=0; i<nums.length; i++ ) { if (nums[i] < 0) nums[i] = -nums[i];... Prof. Dr. Margarita Esponda 70
71 Das synchronized-schlüsselwort in Java T1... synchronized (A) {... synchronized (B) { T2... synchronized (B) {... synchronized (A) { Verklemmung! Prof. Dr. Margarita Esponda 71
72 Monitore Gemeinsame Daten T a T b T c T d Bedingungsvariablen b 1 T 2 T 1 T 3 Warteschlangen, die mit b 2 b 3 T 7 T 4 T 5 Bedingungsvariablen verbunden sind. Sprachen mit Monitorkonzept... Concurrent Pascal C# Erlang Ada Squeak Smalltalk Java Prof. Dr. Margarita Esponda 72
73 Wait und Notify Die wait() und notify()-methoden können nur innerhalb eines synchronized-blockes stehen. Aufruf der wait-methode - Der Thread gibt die Objektschlüssel zurück. - Der Thread selber geht in den blockierten Zustand. - Der blockierte Thread wird in die Warteschlange des Objektes gestellt. Aufruf der notify-methode - Ein beliebiger Thread aus der Warteschlange des Objektes wird gewählt. - Der gewählte Thread wird in den Entry-Set gestellt. - Der Zustand des Threads wird auf runnable gesetzt. Prof. Dr. Margarita Esponda 73
74 Monitore in Java T 8 T 1 Entry-Set T 8 T 1 Das Objekt ist blockiert wait T 3 T 2 T 4 T o Wait-Set Hier warten die Threads auf den Lock des Objektes Besitzer des Objektes Hier warten die Threads auf ein Notify Prof. Dr. Margarita Esponda 74
75 Monitore in Java T 8 T 1 Entry-Set T 8 T 1 Das Objekt ist blockiert notify T o Wait-Set T 3 T 2 T 4 Hier warten die Threads auf den Lock des Objektes Besitzer des Objektes Hier warten die Threads auf ein Notify Prof. Dr. Margarita Esponda 75
76 Leser/Schreiber-Problem - beliebig viele Threads dürfen gleichzeitig lesen - nur ein Thread darf schreiben (keiner darf lesen) public class Database implements ReadWriteLock { private int readercounter; private boolean Writing; public Database(){ readercounter = 0; Writing = false;... //end of class Database Prof. Dr. Margarita Esponda 76
77 Leser/Schreiber-Problem public class Database implements ReadWriteLock {... public synchronized void acquirereadlock() { while( Writing == true ){ try { wait(); catch (InterruptedException e) {... ++readercounter; public synchronized void acquirewritelock() { while( readercounter>0 Writing==true ){ try { wait(); catch (InterruptedException e) {... Writing = true; //end of class Database Prof. Dr. Margarita Esponda 77
78 Leser/Schreiber-Problem public class Database implements ReadWriteLock {... public synchronized void releasereadlock() { --readercounter; /* der letzte Leser meldet sich */ if ( readercounter==0 ) notify(); public synchronized void releasewritelock() { Writing = false; notifyall();... //end of class Database Verhungern! Prof. Dr. Margarita Esponda 78
79 Gliederung der Vorlesung - Konzepte der Nebenläufigkeit - Threads in Java - Synchronisationsprobleme - Klassische Lösungen - Semaphoren - Monitore - Lebenszyklus eines Threads Prof. Dr. Margarita Esponda 79
80 Lebens-Zyklus eines Threads JDK 1.1 new Thread() suspend() New start() rechen- bereit resume() blockiert stop() stop() stop() Tot Deadlock-Probleme! Prof. Dr. Margarita Esponda 80
81 Verklemmungsprobleme stop kritischer Abschnitt Verklemmung! Prof. Dr. Margarita Esponda 81
82 Lebens-Zyklus eines Threads JDK 1.2 new Thread() schlafend IO- blockiert interrupt Time out IO-End sleep() IO-Operation neu start() rechen- bereit yield() Scheduling rechnend terminiert tot interrupt notify() wait() Freigegeben Monitor besetzt interrupt wartend Monitor- blockiert Prof. Dr. Margarita Esponda 82
83 java.util.concurrent - Klassen mit unteilbarem (atomarem) Zugriff AtomicBoolean, AtomicInteger, AtomicIntegerArray, AtomicLong, AtomicReference, usw. - Erweiterte Sammlungsklassen für Threads ConcurrentLinkedQueue, ConcurrentHashMap, usw. - Semaphor-Klasse - Klassen für ThreadPools - Erweiterte Klassen für Sperren und Synchronisation Prof. Dr. Margarita Esponda 83
84 Threads Unterbrechungen in Java Threads zu unterbrechen ist kompliziert, wenn diese gerade gemeinsame Ressourcen verwenden. In Java haben Threads einen Unterbrechungsanforderungszustand. Asynchrone Unterbrechung stop() Deprecated Deferred Cancellation (verzögerte Unterbrechung) Unterbrechungen interrupt() Der interruption-status des Threads wird gesetzt. interrupted() Der interruption-status des Threads wird geprüft und zurück gesetzt. isinterrupted() Der interruption-status des Threads wird nur geprüft. Prof. Dr. Margarita Esponda 84
85 Threads unterbrechen in Java Die interrupt- Methode setzt nur den Unterbrechungsanforderungszustand eines Threads auf true. Um einen Thread tatsächlich unterbrechen zu können, müssen wir unterbrechbare Threads programmieren, die diesen Zustand regelmäßig selber überprüfen und ihre run-methode dann selber beenden, wenn alle Ressourcen abgegeben worden sind. Die interrupted-methode ist eine statische Methode, die den Unterbrechungsanforderungszustand des aktuellen Threads nur einmal überprüft und zurück setzt. Die interrupt-methode liefert eine InterruptedException, wenn ein Thread vorher wegen einer wait- sleep- oder join-methode bereits unterbrochen worden ist. Ab Java 1.5 ist es auch möglich Threads zu unterbrechen, die auf Ein- Ausgabe-Operationen warten (siehe Package java.nio). Prof. Dr. Margarita Esponda 85
86 Threads unterbrechen in Java public class UnterbrechbareThread extends Thread { public void run() { while( true ){ System.out.println("Hi! Ich lebe noch!!!"); if ( Thread.currentThread().isInterrupted() ){ System.out.println("Ich bin aufgefordert zu unterbrechen!"); break; /* Hier kann der Thread Ressourcen abgeben und * seine Ausführung sauber beenden. */ // end of class UnterbrechbareThread Unterbrechbare Threads müssen selber ihren interrupted-status kontrollieren und ihre Ausführung selber unterbrechen. Prof. Dr. Margarita Esponda 86
87 Threads unterbrechen in Java public class Test_UnterbrechbareThread { public static void main(string args[]){ Thread th = new Thread(new UnterbrechbareThread()); th.start(); Schlaf.nickerchen(200); th.interrupt(); Der Unterbrechungsanforderungszustand des Threads wird auf true gesetzt. Prof. Dr. Margarita Esponda 87
88 Literatur Java Threads. 3th Edition Scott Oaks & Henry Wong. Prof. Dr. Margarita Esponda 88
Nebenläufigkeit in Java. Prof. Dr. Margarita Esponda
Nebenläufigkeit in Java Prof. Dr. Margarita Esponda Gliederung der Vorlesung - Konzepte der Nebenläufigkeit -Threads in Java - Synchronisationsprobleme - Klassische Lösungen -Semaphoren - Monitore - Lebenszyklus
MehrPraktikum aus Softwareentwicklung 2, Stunde 5
Praktikum aus Softwareentwicklung 2, Stunde 5 Lehrziele/Inhalt 1. Threads Threads Threads sind parallele, oder auf Rechnern mit nur einer CPU quasi-parallele, Programmabläufe in Java. Sie können beispielsweise
MehrThread-Konzept in objektorientierten Programmiersprachen. Threads. Threads in Java
Thread-Konzept in objektorientierten Programmiersprachen 1 Threads ein Thread ist ein eigenständiges Programmfragment, das parallel zu anderen Teilen eines Programmes ablaufen kann alle Threads eines Programmes
MehrDr. Monika Meiler. Inhalt
Inhalt 15 Parallele Programmierung... 15-2 15.1 Die Klasse java.lang.thread... 15-2 15.2 Beispiel 0-1-Printer als Thread... 15-3 15.3 Das Interface java.lang.runnable... 15-4 15.4 Beispiel 0-1-Printer
Mehr5. Threads, Serverprozesse und Benachrichtigungen
5. Threads, Serverprozesse und Benachrichtigungen Threads allgemein Threads in Android: Handler und Messages Services: Local, Remote, Binding Benachrichtigungen Entwicklung mobiler Anwendungen Europäische
MehrProgrammierung mit Threads in Java
Programmierung mit Threads in Java Harald Kosch and Matthias Ohlenroth Institut für Informationstechnologie Universität Klagenfurt H. Kosch Threads in Java 1 Inhalt Grundlagen: Threads und Datenlokalität
Mehr2.2 Prozesse in Java
2.2 Prozesse in Java! Java sieht kein Schlüsselwort für Prozesse vor, sondern bestimmte Klassen und Schnittstellen. Mit anderen Worten: der Prozessbegriff wird mit Mitteln der Objektorientierung eingeführt.
MehrParallele Prozesse. Prozeß wartet
Parallele Prozesse B-66 Prozeß: Ausführung eines Programmes in seinem Adressraum (zugeordneter Speicher) Parallele Prozesse: gleichzeitig auf mehreren Prozessoren laufende Prozesse p1 p2 verzahnte Prozesse:
MehrVorlesung Informatik II
Vorlesung Informatik II Universität Augsburg Wintersemester 2011/2012 Prof. Dr. Bernhard Bauer Folien von: Prof. Dr. Robert Lorenz Lehrprofessur für Informatik 17. JAVA Kommunikation von Threads 1 Motivation
MehrNebenläufigkeit mit Java
Nebenläufigkeit mit Java Einheit 02: Eigenschaften & kritische Abläufe Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda Eigenschaften von Threads Name, Priorität, Zustand Zustandsübergänge
MehrVersuchsziele Konzepte der parallelen Programmierung am Beispiel von Threads anwenden können. Einbau von Kontrollmechanismen mittels Semaphore.
Hochschule Harz Versuch: fcopy Mit Java FB Automatisierung und Informatik Betriebssysteme Thema: Kopieren einer Datei unter der Kontrolle von Semaphoren Versuchsziele Konzepte der parallelen Programmierung
MehrJava Concurrency Utilities
Java Concurrency Utilities Java unterstützt seit Java 1.0 Multithreading Java unterstützt das Monitorkonzept mittels der Schlüsselworte synchronized und volatile sowie den java.lang.object Methoden wait(),
MehrÜbung zu Grundlagen der Betriebssysteme. 10. Übung 18.12.2012
Übung zu Grundlagen der Betriebssysteme 10. Übung 18.12.2012 Aufgabe 1 a) Was versteht man unter einem kritischen Abschnitt oder kritischen Gebiet (critical area)? b) Welche Aufgabe hat ein Semaphor? c)
MehrProzesse. Prozesse sind Programme. Prozesse können aus Unterprozessen bestehen. Prozesshierarchie Unterprozesse Threads
Threads Prozesse, Parallelität, Nebenläufigkeit, Threads, Erzeugung, Ausführung, Kommunikation, Interferenz, Kritischer Bereich, Deadlock, Synchronisation. Prozesse Prozesse sind Programme mehrere Prozesse
MehrThread-Synchronisation in in Java. Threads Wechselseitiger Ausschluss Bedingte Synchronisation Beispiel: Warteschlangen
Thread-Synchronisation in in Java Threads Wechselseitiger Ausschluss Bedingte Synchronisation Beispiel: Warteschlangen Die Klasse Thread Die Die Klasse Thread gehört zur zur Standardbibliothek von von
MehrMotivation. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 20: Threads. Inhalt. Ein Beispiel zur Motivation
Universität Osnabrück 1 Motivation 3 - Objektorientierte Programmierung in Java Führt ein Applet eine lange Berechnung aus, so erfolgt keine Reaktion auf die Betätigung des Stop-Buttons am Browser bzw.
MehrJava Threads. von Gerhart Mende und Awad Fuad. Fuad Awad & Gerhart Mende ProSeminar parallele Programmierung 1
Java Threads von Gerhart Mende und Awad Fuad Fuad Awad & Gerhart Mende ProSeminar parallele Programmierung 1 Einleitung Erzeugung und Start von Threads Synchronisation von Java Threads Signalmechanismus
MehrSynchronisation in Java. Invisible Web
Synchronisation in Java Studienprojekt Invisible Web Tang Zhihong Synchronisation in Java Synchronisationsproblem Monitore Wait und notify PipedInputStream und PipedOutputStream Synchronisation von Collections
MehrNebenläufigkeit mit Java
Nebenläufigkeit mit Java Einheit 03: Synchronisation Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda Synchronisation von Threads Locks Java Monitor-Konzept Lock Freigabe Zusammenspiel
MehrParallele Prozesse Prozeß Parallele Prozesse verzahnte Prozesse Nebenläufige Prozesse: Threads Vorlesung Software-Entwicklung / Folie 131 Ziele:
Parallele Prozesse SWE-131 Prozeß: Ausführung eines sequentiellen Programmstückes in dem zugeordneten Speicher (Adressraum). Veränderlicher Zustand: Speicherinhalt und Programmposition. Parallele Prozesse:
MehrAusnahmebehandlung in Java
Ausnahmebehandlung in Java class A { void foo() throws Help, SyntaxError {... class B extends A { void foo() throws Help { if (helpneeded()) throw new Help();... try {... catch (Help e) {... catch (Exception
MehrJava I Vorlesung Nebenläufigkeit
Java I Vorlesung 10 Nebenläufigkeit 28.6.2004 Threads Synchronisation Deadlocks Thread-Kommunikation Innere Klassen Anonyme Klassen Nebenläufigkeit http://java.sun.com/docs/books/tutorial/essential/threads/
MehrAusgewählte Implementierungsprobleme
Ausgewählte Implementierungsprobleme Rebecca Tiarks 18. Dezember 2008 1 / 30 Inhaltsverzeichnis 1 2 3 Persistenzproblem & CSV Binärformat 2 / 30 Themenübersicht 1 18. Dez: + 2 8. Jan. Swing 3 15. Jan TCP,
Mehr12. Threads in Java. Sequentielle Abarbeitung (2) Beispiel: Thread (1) Sequentielle Abarbeitung (1)
12. Threads in Java Einführendes Beispiel 12. Threads in Java 12. Threads in Java Einführendes Beispiel Sequentielle Abarbeitung (2) Ein Thread ist eine Folge von Anweisungen, die unabhängig von anderen
MehrNebenläufige Programmierung in Java: Threads
Nebenläufige Programmierung in Java: Threads Wahlpflicht: Fortgeschrittene Programmierung in Java Jan Henke HAW Hamburg 10. Juni 2011 J. Henke (HAW) Threads 10. Juni 2011 1 / 18 Gliederung 1 Grundlagen
MehrZur Erinnerung: Threads. Threadverwaltung. Threads: Prioritäten. Beispiel Flugbuchungsprogramm. Nichtdeterminismus
Zur Erinnerung: Threads Programmierung (fortgeschrittene Konzepte) Threads, Monitore, Semaphore und speisende en Wolf-Ulrich Raffel (uli@wuraffel.de) Möglichkeiten, Threads zu definieren Bildung einer
MehrVerteilte Systeme. 2. Die Client-Server-Beziehung und daraus resultierende Techniken. 2.2 Nebenläufigkeitstechniken in Java
VS22 Slide 1 Verteilte Systeme 2. Die Client-Server-Beziehung und daraus resultierende Techniken 2.2 Nebenläufigkeitstechniken in Java Sebastian Iwanowski FH Wedel VS22 Slide 2 Was ist Nebenläufigkeit?
MehrVorlesung Informatik II
Vorlesung Informatik II Universität Augsburg Wintersemester 2011/2012 Prof. Dr. Bernhard Bauer Folien von: Prof. Dr. Robert Lorenz Lehrprofessur für Informatik 16. Java: Threads für Animationen 1 Motivation
MehrVersuchsziele. Grundlagen. Überblick: FB Automatisierung und Informatik Betriebssysteme Thema: Bounded-Buffer-Problem. 3.
Hochschule Harz 3. Labor Threads FB Automatisierung und Informatik Betriebssysteme Thema: Bounded-Buffer-Problem Versuchsziele Vertiefung im Verständnis der Thread- und Semaphor-Programmierung. Grundlagen
MehrBeispiel für überladene Methode
Beispiel für überladene Methode class Gras extends Futter {... abstract class Tier { public abstract void friss (Futter x); class Rind extends Tier { public void friss (Gras x) {... public void friss (Futter
MehrSysteme I: Betriebssysteme Kapitel 5 Nebenläufigkeit und wechselseitiger Ausschluss. Maren Bennewitz
Systeme I: Betriebssysteme Kapitel 5 Nebenläufigkeit und wechselseitiger Ausschluss Maren Bennewitz Version 12.12.2012 1 Nachtrag zu letzter Vorlesung Hauptspeicher reicht nur für begrenzte Anzahl von
MehrThreading. Arthur Zaczek. Aug 2015
Arthur Zaczek Aug 2015 1 Threading 1.1 Motivation Threading erlaubt die gleichzeitige Ausführung von mehreren Programmteilen. mehrere gleichzeitige Anfragen: Webserver, Datenbank (zu) lange laufende Berechnungen:
MehrEinführung in die Programmierung Blockkurs Java
Michael Bader 8. 12. April 2002 Freitag Inhaltsübersicht Exceptions und Errors Ausnahmebehandlung: try/catch/finally Threads Zugriffskontrolle bei gemeinsamen Variablen: synchronized, wait(), notify()
MehrSysteme I: Betriebssysteme Kapitel 5 Nebenläufigkeit und wechselseitiger Ausschluss. Maren Bennewitz
Systeme I: Betriebssysteme Kapitel 5 Nebenläufigkeit und wechselseitiger Ausschluss Maren Bennewitz Version 18.12.2013 1 Inhalt Vorlesung Aufbau einfacher Rechner Überblick: Aufgabe, Historische Entwicklung,
MehrNebenläufige Programmierung I
Nebenläufige Programmierung I Martin Wirsing in Zusammenarbeit mit Matthias Hölzl, Piotr Kosiuczenko, Dirk Pattinson 07/03 Ziele 2 Grundlegende Begriffe der nebenläufigen Programmierung verstehen lernen
MehrSoll die Programm-Ausführung nicht beendet werden, muss der Fehler abgefangen werden. NumberFormatException
Soll die Programm-Ausführung nicht beendet werden, muss der Fehler abgefangen werden. Beispiel: NumberFormatException public class Adding extends MiniJava { public static void main(string[] args) { int
MehrJJ Prozesse und Nebenläufigkeit
1 Wiederholung: Algorithmus von Peterson boolean ready0=false, ready1=false; int turn=0; JJ Prozesse und Nebenläufigkeit (Auszug aus der Vorlesung) while( 1 ) Prozess 0 ready0 = true; turn = 1; while(
MehrParallele Programmierung in Java
PPJ-1 Parallele Programmierung in Java Prof. Dr. Uwe Kastens Sommersemester 2000 Vorlesung Parallele Programmierung in Java SS 2000 / Folie 01 PPJ-2 Ziele und Durchführung Die Studierenden sollen grundlegende
MehrKapitel 5. Monitore und Synchronisationsbedingungen
Seite Kapitel 5 Monitore und Synchronisationsbedingungen Prof. Dr. Rolf Hennicker 5.6.24 5. Synchronisationsbedingungen Seite 2 Bisherige Verwendung von Monitoren: Verkapselung von Daten, Zugriffoperationen
MehrProzessverwaltung. Ein Prozess ist das zentrale Konzept in jedem Betriebssystem.
Prozessverwaltung Ein Prozess ist das zentrale Konzept in jedem Betriebssystem. Wir machen die Annahme, dass jeder Prozess ein Thread innerhalb des Betriebssystems zugeordnet bekommt. Prozesse Parameter
MehrVerteilte Systeme CS5001
Verteilte Systeme CS5001 Th. Letschert TH Mittelhessen Gießen University of Applied Sciences Client-Server-Anwendungen: Vom passiven (shared state) Monitor zum aktiven Monitor Monitor (Hoare, Brinch-Hansen,
MehrInstitut für Programmierung und Reaktive Systeme 7. Juli Programmieren II. Übungsklausur
Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme 7. Juli 2017 Hinweise: Klausurtermine: Programmieren II Übungsklausur Programmieren I: 28. August
MehrThreads Einführung. Multitasking/Multiprozessing. Multiprozessing. Einführung. Prozess
s Einführung Einführung in Prozesse und s Single- und Multithreading in Java Java s: Erzeugung, Methoden und Zustände sicherheit Einführung 2 von 45 Einführung Multitasking/Multiprozessing Multiprozessing
MehrÜberblick. Verteilte Systeme - Übung. Was ist ein Thread? Threads in Java. Multithreading in Java Threads Synchronisation Koordinierung
Überblick Verteilte Systeme - Übung Friedrich-Alexander-Universität Erlangen-Nürnberg Lehrstuhl Informatik 4 (Verteilte Systeme und Betriebssysteme) www4.informatik.uni-erlangen.de Sommersemester 2009
MehrVS4 Slide 1. Verteilte Systeme. Vorlesung 4 vom 29.04.2004 Dr. Sebastian Iwanowski FH Wedel
VS4 Slide 1 Verteilte Systeme Vorlesung 4 vom 29.04.2004 Dr. Sebastian Iwanowski FH Wedel Inhaltsverzeichnis für die Vorlesung Zur Motivation: 4 Beispiele aus der Praxis Allgemeine Anforderungen an Verteilte
MehrProzesse und Threads. Saalübung Informatik II SS Threads erzeugen. Prozesse und Threads. Threads, Monitore und Semaphore
Saalübung Informatik II SS 2006 Threads, Monitore und Semaphore Virtuelle Speicherverwaltung Prozesse und Threads Moderne Betriebssysteme - Illusion, dass verschiedene Programme gleichzeitig ausgeführt
MehrParallele und funktionale Programmierung Wintersemester 2015/ Übung Abgabe bis , 10:00 Uhr
3. Übung Abgabe bis 10.11.2015, 10:00 Uhr Aufgabe 3.1: Java-Synchronisation a) An welchen Stellen im Code kann das Schlüsselwort synchronized verwendet werden? b) Wie nennt sich die Synchronisations-Art,
MehrNebenläufige Programmierung I
Nebenläufige Programmierung I Martin Wirsing in Zusammenarbeit mit Moritz Hammer und Axel Rauschmayer SS06 2 Ziele Grundlegende Begriffe der nebenläufigen Programmierung verstehen lernen Nebenläufige Programme
MehrBetriebssysteme G: Parallele Prozesse (Teil A: Grundlagen)
Betriebssysteme G: Parallele Prozesse (Teil A: Grundlagen) 1 Prozesse Bei Betriebssystemen stoßen wir des öfteren auf den Begriff Prozess als wahrscheinlich am häufigsten verwendeter und am unklarsten
MehrNebenläufige Programmierung in Java
Informatik IV 37-004 SS 2002 Thomas Gross Diese Slides kommen ohne Gewähr. 9-1 Thomas Gross 1997-2000 Nebenläufige Programmierung in Java Threads und deren Zustände Speichermodell Einfache Synchronisation
Mehr16. Parallelität: Threads
Schwerpunkte 16. Parallelität: Threads Java-Beispiele: ThreadBasicTest.java ThreadSleep.java ThreadJoin.java SpotTest.java Leichtgewichtige und schwergewichtige Prozesse Threads: nutzerprogrammierte Parallelität
MehrKlausur Software-Entwicklung September 00
Aufgabe 1: Wahrheitstafeln ausgeben (ca. 8 Punkte) Matrikelnr : Ergänzen Sie in folgendem Programm, eine rekursive Funktion, die eine Boole'sche Wahrheitstafel für N Variablen ausgibt. Die Zahl N soll
MehrMulti-Threading. Ralf Abramowitsch Vector Informatik GmbH abramowitsch@lehre.dhbw-stuttgart.de
Multi-Threading Ralf Abramowitsch Vector Informatik GmbH abramowitsch@lehre.dhbw-stuttgart.de Einführung in Threads Threads synchronisieren ThreadPools Thread = unabhängiger Ausführungspfad, der gleichzeitig
MehrUniversität Potsdam Institut für Informatik Sommersemester Programmierung. Lehrblatt Woche 11
Universität Potsdam Institut für Informatik Sommersemester 2014 Programmierung Lehrblatt Woche 11 1 Applets In den letzten Wochen haben Sie die graphische Programmierung kennengelernt. Um Java-Programme
MehrDie Anweisungen zweier Prozesse werden parallel bearbeitet, wenn die Anweisungen unabhängig voneinander zur gleichen Zeit ausgeführt werden.
7 Parallelität und Nebenläufigkeit Mehrere Prozessen oder Threads Parallelität Die Anweisungen zweier Prozesse werden parallel bearbeitet, wenn die Anweisungen unabhängig voneinander zur gleichen Zeit
MehrFunktionale und Objekt-Orientierte Programmierkonzepte
Funktionale und Objekt-Orientierte Programmierkonzepte Prof. Marc Fischlin, Wintersemester 15/16 Kapitel 17: GUI, Threads und verschachtelte Klassen 13. Oktober 2010 Dr.Marc Fischlin Kryptosicherheit 1
MehrInstitut für Programmierung und Reaktive Systeme 17. Juli Programmieren II. Übungsklausur
Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme 17. Juli 2015 Hinweise: Klausurtermine: Programmieren II Übungsklausur Programmieren I: 7. September
MehrJavakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt Tag 3 - Objektorientierung Warum Objektorientierung Daten und Funktionen möglichst eng koppeln und nach außen kapseln Komplexität der Software besser modellieren
MehrDurch die Teil-von-Beziehung soll ausgedrückt werden, dass ein Objekt A als (physikalischer) Teil eines Objekts B angesehen wird. Insbesondere kann ei
Lösungsvorschläge zur Klausur zum Kurs 1618 Sommersemester 2001 am 22.9.2001 Aufgabe 1 a) Benutzungsbeziehung: class Kennzeichen class Fahrzeug boolean gueltigeskennzeichen (Kennzeichen kz) Objekte der
MehrEINFÜHRUNG IN DIE PROGRAMMIERUNG
EINFÜHRUNG IN DIE PROGRAMMIERUNG FORTGESCHRITTENE KONZEPTE Tobias Witt 26.03.2014 tobias.witt@hhu.de 25.12.01.30 Bürozeiten: 09 Uhr - 12 Uhr FEHLERBEHANDLUNG KLASSISCHER ANSATZ Fehlercode als Rückgabewert
MehrUniversität Augsburg, Institut für Informatik Sommersemester 2001 Prof. Dr. Martin Ester 08. Oktober Klausur II
Universität Augsburg, Institut für Informatik Sommersemester 2001 Prof. Dr. Martin Ester 08. Oktober 2001 Stefan Holland Informatik II Hinweise: Klausur II Verwenden Sie für Ihre Lösungen ausschließlich
MehrSysteme I: Betriebssysteme Kapitel 4 Prozesse. Maren Bennewitz
Systeme I: Betriebssysteme Kapitel 4 Prozesse Maren Bennewitz Version 21.11.2012 1 Begrüßung Heute ist Tag der offenen Tür Willkommen allen Schülerinnen und Schülern! 2 Testat nach Weihnachten Mittwoch
MehrSysteme I: Betriebssysteme Kapitel 4 Prozesse. Wolfram Burgard
Systeme I: Betriebssysteme Kapitel 4 Prozesse Wolfram Burgard Version 18.11.2015 1 Inhalt Vorlesung Aufbau einfacher Rechner Überblick: Aufgabe, Historische Entwicklung, unterschiedliche Arten von Betriebssystemen
MehrMultithreading ab Java 5: Die neuen Concurrency APIs
Multithreading ab Java 5: Die neuen Concurrency APIs Java Concurrency Spezifiziert in JSR166 Ab Java 5 fester Bestandteil von Java Durch zusätzliche Library auch vor Java 5 vorhanden backport-util-concurrent
MehrKurz über Booting. Um das Betriebssystem zu laden, brauchen wir ein minimales Betriebssystem ("the bootstrap loader") dafür.
Kurz über Booting Um das Betriebssystem zu laden, brauchen wir ein minimales Betriebssystem ("the bootstrap loader") dafür. "to pull yourself up by your bootstrap" Der "bootstrap loader" wiederum lädt
MehrJava Schulung (Java 2 Java Development Kit 5 / 6)
4. Threads und nebenläufige Programmierung 4.1 Prozesse und Threads Moderne Betriebssysteme geben Benutzer die Illusion, verschiedene Programm würden gleichzeitig ausgeführt (Multitasking) Tatsächlich
MehrEchtzeitanwendungen mit Java Real Time Specification for Java
Fakultät Informatik» Institut für Angewandte Informatik» Lehrstuhl für Technische Informationssysteme Echtzeitanwendungen mit Java Real Time Specification for Java Vortrag im Rahmen des Hauptseminars Technische
Mehr6. Tutorium zu Softwaretechnik I
6. Tutorium zu Softwaretechnik I Parallelität und Testen Michael Hoff 01.07.2014 INSTITUT FÜR PROGRAMMSTRUKTUREN UND DATENORGANISATION KIT Universität des Landes Baden-Württemberg und nationales Forschungszentrum
MehrNeben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter
Kapitel 1 Der vierte Tag 1.1 Vererbung Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter Sprachen. Unter Vererbung versteht man die Möglichkeit, Eigenschaften vorhandener
MehrInstitut für Informatik. Endterm Klausur zu Informatik I 20. Februar 2010
Technische Universität München Institut für Informatik Lehrstuhl für Computer Graphik & Visualisierung Prof. R. Westermann Endterm Klausur zu Informatik I 20. Februar 2010 ˆ Die Arbeitszeit beträgt 120
MehrDezentrale Kontrolle: Aktive Objekte. Aktive Objekte Die Klasse AnimatorThread Aktivierung Objekte beobachten Die Java-Klasse Thread
Dezentrale Kontrolle: Aktive Objekte Aktive Objekte Die Klasse AnimatorThread Aktivierung Objekte beobachten Die Java-Klasse Thread Passive Objekte Bieten Dienste auf Abruf an: - eine Zahl von der Konsole
MehrFAKULTÄT FÜR INFORMATIK
TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK Lehrstuhl für Sprachen und Beschreibungsstrukturen WS 2006/2007 Praktikum Grundlagen der Programmierung Lösungsvorschläge zu Blatt 11 F. Forster,
MehrBetriebssysteme G: Parallele Prozesse ( Teil C: SpinLock, Semaphore, Monitore)
Betriebssysteme G: Parallele Prozesse ( Teil C: SpinLock, Semaphore, Monitore) 1 Hardwareunterstützung Uniprozessor-System Verbiete Interrupts während des Aufenthalts in einer CR disable interrupt CR(bzw:
MehrDas Monitorkonzept Brinch-Hansen
Das Monitorkonzept (nach Hoare/Brinch Brinch-Hansen 1974) Nur ein Prozess bzw. Thread kann zu einem bestimmten Zeitpunkt im Monitor aktiv sein => gegenseitiger Ausschluss, mutual exclusion. Geschützte
MehrThreads In dieser Übung beschäftigen wir uns mit der Realisierung von Threads in Java.
Threads In dieser Übung beschäftigen wir uns mit der Realisierung von Threads in Java. Aufgabe 1: Erzeugen und Starten von Threads a) Sei BankKunde eine von einer Klasse Kunde abgeleitete Klasse. Erweitern
MehrKlausurvorbereitung VS1 (Prof. Brecht) (B0rg Edition)
Ein Prozess kann unmittelbar vom Zustand 1. Running in den Zustand Ready 2. Running in den Zustand Blocked 3. Ready in den Zustand Running Klausurvorbereitung VS1 (Prof. Brecht) (B0rg Edition) Der Adressraum
MehrArbeitsblätter für die Lehrveranstaltung OOP JAVA 4
Fachhochschule Stralsund Fachbereich Maschinenbau Lehrgebiet Informatik Prof. Dr.-Ing.Ch.Wahmkow Arbeitsblätter für die Lehrveranstaltung OOP JAVA 4 IV. Threads, Audiodateien, Bilder, Datumsfunktion, Aufruf
Mehr3.2 Prozessumschaltung
3.2 Prozessumschaltung (dispatching) deaktiviert einen Prozess und aktiviert einen anderen. Wann? aktiver Prozess wird vom Prozessor verdrängt zugunsten eines bereiten Prozesses aktiver Prozess blockiert,
MehrInstitut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke
Institut für Programmierung und Reaktive Systeme Java 6 Markus Reschke 13.10.2014 OOP Objekte = Verhalten (durch Methoden) + Daten (durch Attribute) Klassen = Baupläne für Objekte Kapselung von Programmteilen
MehrBeispiele für Ausdrücke. Der imperative Kern. Der imperative Kern. Imperativer Kern - Kontrollstrukturen. Deklarationen mit Initialisierung
Beispiele für Ausdrücke Der imperative Kern Deklarationen mit Initialisierung Variablendeklarationen int i = 10; int j = 15; Beispiele für Ausdrücke i+j i++ i & j i j [] [static]
MehrEinstieg in die Informatik mit Java
Vorlesung vom 18.4.07, Grundlagen Übersicht 1 Kommentare 2 Bezeichner für Klassen, Methoden, Variablen 3 White Space Zeichen 4 Wortsymbole 5 Interpunktionszeichen 6 Operatoren 7 import Anweisungen 8 Form
MehrSysteme I: Betriebssysteme Kapitel 4 Prozesse. Maren Bennewitz
Systeme I: Betriebssysteme Kapitel 4 Prozesse Maren Bennewitz Version 13.11.2013 1 Inhalt Vorlesung Aufbau einfacher Rechner Überblick: Aufgabe, Historische Entwicklung, unterschiedliche Arten von Betriebssystemen
MehrBetriebssysteme. Vorlesung im Herbstsemester 2010 Universität Mannheim. Kapitel 6: Speicherbasierte Prozessinteraktion
Betriebssysteme Vorlesung im Herbstsemester 2010 Universität Mannheim Kapitel 6: Speicherbasierte Prozessinteraktion Felix C. Freiling Lehrstuhl für Praktische Informatik 1 Universität Mannheim Vorlesung
MehrVerteilte Systeme. Nebenläufigkeit. Prof. Dr. Oliver Haase
Verteilte Systeme Nebenläufigkeit Prof. Dr. Oliver Haase 1 Arten der Nebenläufigkeit 1-Prozessor(kern)-System quasiparallele Ausführung erhöht Interaktivität durch Umschalten zwischen Threads kann Parallelitätsgrad
MehrRepetitorium Informatik (Java)
Repetitorium Informatik (Java) Tag 6 Lehrstuhl für Informatik 2 (Programmiersysteme) Übersicht 1 Klassen und Objekte Objektorientierung Begrifflichkeiten Deklaration von Klassen Instanzmethoden/-variablen
Mehr12 Abstrakte Klassen, finale Klassen und Interfaces
12 Abstrakte Klassen, finale Klassen und Interfaces Eine abstrakte Objekt-Methode ist eine Methode, für die keine Implementierung bereit gestellt wird. Eine Klasse, die abstrakte Objekt-Methoden enthält,
MehrJava Real-Time Specification
Ausgewählte Kapitel eingebetteter Systeme Java Real-Time Specification Tobias Distler 05.07.2006 Java und Echtzeit? Problem Nichtdeterministisches Verhalten der Garbage Collection Weitere Nachteile Scheduling
MehrEinstieg in die Informatik mit Java
1 / 25 Einstieg in die Informatik mit Java Objektorientierte Programmierung und Klassen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 25 1 Die Philosophie 2 Definition
MehrTheorie zu Übung 8 Implementierung in Java
Universität Stuttgart Institut für Automatisierungstechnik und Softwaresysteme Prof. Dr.-Ing. M. Weyrich Theorie zu Übung 8 Implementierung in Java Klasse in Java Die Klasse wird durch das class-konzept
MehrObjektorientierte Programmierung und Klassen
Objektorientierte Programmierung und Klassen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Vorlesung: Einstieg in die Informatik mit Java 16.5.07 G. Bohlender (IANM UNI Karlsruhe) OOP
MehrVorlesung 2. Prozesse und Threads
Vorlesung 2 Prozesse und Threads 1 PROZESSE IN SOFTWARESYSTEMEN Komplexe Systeme bestehen aus mehreren Programmen, die gelichzeitig/nebenläufig ausgeführt werden Die Ausführung eines Programms wird oft
MehrAlgorithmen und Datenstrukturen
Algorithmen und Datenstrukturen Tafelübung 03 Vererbung, Polymorphie, Sichtbarkeit, Interfaces Clemens Lang T2 11. Mai 2010 14:00 16:00, 00.152 Tafelübung zu AuD 1/26 Klassen und Objekte Klassen und Objekte
MehrFH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Referenzen. Referenzen
5 Objektorientierte Programmierung in Java Prof. Dr. Ing. André Stuhlsatz Referenzen Beispiel an der einfachen Klasse Walze: public class Walze { int id; public Walze(int id) { this.id = id; Verwenden
MehrInformatik B - Objektorientierte Programmierung in Java. Vorlesung 21: Threads 2. Inhalt
Universität Osnabrück 1 wait und notify 3 - Objektorientierte Programmierung in Java Vorlesung 21: Threads 2 SS 2006 Prof. Dr. F.M. Thiesing, FH Osnabrück Neben dem Monitorkonzept stehen mit den Methoden
MehrParallele und verteilte Anwendungen in Java
Parallele und verteilte Anwendungen in Java Bearbeitet von Rainer Oechsle 3., erweiterte Auflage 2011. Buch. 416 S. Hardcover ISBN 978 3 446 42459 3 Format (B x L): 20,3 x 24,5 cm Gewicht: 1068 g Weitere
MehrThreads - und wie sie in Java implementiert sind. Vortrag von Lukas Klimmasch, Stefan Lang und Ralf Schmidt Jena, den
Threads - und wie sie in Java implementiert sind Vortrag von Lukas Klimmasch, Stefan Lang und Ralf Schmidt Jena, den 05.12.2011 Was ist ein Thread? laut Wikipedia: ein Ausführungsstrang oder eine in der
MehrJava Solutions. Programmier- und Architekturlösungen für die Java-Plattform. Bearbeitet von Markus Kopp, Gerhard Wilhelms
Java Solutions Programmier- und Architekturlösungen für die Java-Plattform Bearbeitet von Markus Kopp, Gerhard Wilhelms 1. Auflage 2004. Buch. 400 S. Hardcover ISBN 978 3 446 22550 3 Format (B x L): 17,7
MehrEinstieg in die Informatik mit Java
1 / 35 Einstieg in die Informatik mit Java Vererbung Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 35 1 Grundlagen 2 Verdeckte Variablen 3 Verdeckte Methoden 4 Konstruktoren
MehrMonitore. Klicken bearbeiten
Sascha Kretzschmann Institut für Informatik Monitore Formatvorlage und deren Umsetzung des Untertitelmasters durch Klicken bearbeiten Inhalt 1. Monitore und Concurrent Pascal 1.1 Warum Monitore? 1.2 Monitordefinition
Mehr4. Thread- und Netzwerk- Programmierung
4. Thread- und Netzwerk- Programmierung 4.1 Ziel dieses Kapitels 4.2 Prozeß versus Thread 4.3 Thread-Programmierung 4.4 TCP/IP Grundlagen 4.5 TCP Programmierung 3. TCP/IP und Threads 3-1 4.1 Ziel dieses
Mehr