Thread - ETH TIK

Werbung
ETH Zürich, SS2001
Java Threads und RMI
Thread-Synchronisation
Threads in Java
Grundlagen
Java Threads
200m
Seite 1
nur ein Kontrollfluß (Thread)
•
Abarbeitung in einem Thread sequentiell
•
Java Threads und RMI
mehrere Threads
•
ETH Zürich, SS2001
Programmteile parallel abarbeiten
•
wünschenswert:
sequentielle Programme
•
traditionell:
Grundlagen
Seite 2
Java Threads und RMI
• besitzen verschiedene
Zustände
• besitzen Prioritäten
müssen sich eine CPU Teilen
• müssen sich synchronisieren
laufen im selben Adreßraum ab
(leichtgewichtige Prozesse)
ETH Zürich, SS2001
•
•
Threads:
Grundlagen
11?
y=x
Thread3
5
int x
unwichtig
wichtig
sehr wichtig
6?
y=x
y+=1
x=y
Thread1
10?
C
P
U
y=x
y+=5
x=y
Thread2
Seite 3
ETH Zürich, SS2001
start()
newborn
Thread:
1. erzeugen
2. starten
3. beenden / stoppen
dead
stop()
running
stop()
stop()
yield()
suspend()
sleep()
wait()
Java Threads und RMI
runnable
resume()
notify()
blocked
Grundlagen
Seite 4
ETH Zürich, SS2001
void join()
void setName()
void setPriority(int prio)
boolean isAlive()
•
•
•
•
Java Threads und RMI
static void sleep(long millis)
•
von Object ererbt:
• void wait()
void start()
•
void notify()
String getName()
int getPriority()
static void yield()
Identifikation
generischer Name
Thread-<nummer>
public Thread(Runnable target)
public Thread(Runnable target, String name)
Methoden:
• void run()
•
•
Konstruktoren:
• public Thread()
• public Thread(String name)
Klasse java.lang.Thread
Seite 5
ETH Zürich, SS2001
Java Threads und RMI
synchronized( Object ) { ............}
•
verwenden
Methoden synchronized deklarieren
•
Monitor anlegen:
Monitor:
• verwaltet Zugriffe auf ein Objekt
• immer nur ein Zugriff möglich
• zwei Zustände: frei --- vergeben
critical
regions
Seite 6
synchronized(x){
y=x;
y += 1;
x=y;
}
Keine andere synchronized
Methode ausführbar
vermeiden gleichzeitigen Objektzugriffs (aus mehreren Threads)
•
Lösung: Objekt-Monitore
gegenseitiger Ausschluß
•
Zweck:
Threads Synchronisieren
ETH Zürich, SS2001
Java Threads und RMI
nächster Monitorbesitzer
ist zufällig
public synchronized void einzahlung(double x){
kontostand += x;
}
public synchronized double stand(){
return kontostand;
}
public Konto (double x){
kontostand = x;
}
class Konto{
privat double kontostand;
Beispiel
Seite 7
k.stand()
warten
k.einzahlung(6)
k.einzahlung(5)
bei Zugriff auf gemeinsame Daten: Synchronisation
Synchronisation durch Objektmonitore
synchronized Objektmethoden
synchronized-Anweisungsblöcke
Synchronisationsfehler sehr schwer zu finden
•
•
•
•
•
Java Threads und RMI
Ablauf ist nichtdeterministisch
•
ETH Zürich, SS2001
Threads ermöglichen paralleles Arbeiten
•
Zusammenfassung
Seite 8
Herunterladen