fh-hof threads richard göbel. fh-hof threads - einführung ein thread ermöglicht die...

13
FH-Hof Threads Richard Göbel

Upload: magdalene-gernand

Post on 05-Apr-2015

103 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: FH-Hof Threads Richard Göbel. FH-Hof Threads - Einführung Ein Thread ermöglicht die quasi-parallele Bearbeitung unterschiedlicher Aufgaben. Threads laufen

FH-Hof

Threads

Richard Göbel

Page 2: FH-Hof Threads Richard Göbel. FH-Hof Threads - Einführung Ein Thread ermöglicht die quasi-parallele Bearbeitung unterschiedlicher Aufgaben. Threads laufen

FH-Hof

Threads - Einführung

Ein Thread ermöglicht die quasi-parallele

Bearbeitung unterschiedlicher Aufgaben.

Threads laufen im Unterschied zu Prozessen im

gleichen virtuellen Speicher ab:

Threads lassen sich effizienter starten

Gemeinsamer Zugriff auf globale Objekte

möglich

Fehler in einem Thread können sich auch auf

andere Threads auswirken

Page 3: FH-Hof Threads Richard Göbel. FH-Hof Threads - Einführung Ein Thread ermöglicht die quasi-parallele Bearbeitung unterschiedlicher Aufgaben. Threads laufen

FH-Hof

Threads - Anwendungsbeispiele

Grafische Benutzeroberfläche

Bearbeitung einer größeren Aufgabenstellung

starten

Integration von Animationen

Netzwerkprogrammierung

Server bedient unterschiedliche Clients

gleichzeitig

Client kommuniziert asynchron mit dem Server

und vieles andere mehr

Page 4: FH-Hof Threads Richard Göbel. FH-Hof Threads - Einführung Ein Thread ermöglicht die quasi-parallele Bearbeitung unterschiedlicher Aufgaben. Threads laufen

FH-Hof

Optionen zur Erzeugung eines Threads

Definition einer Unterklasse der Klasse Thread Bereitstellung der Methode void run() mit dem

Rumpf des Threads

Thread kann mit Methode void start() gestartet werden

Thread wartet mit Methode void sleep(int msek)

Thread soll selbständig die Arbeit beenden (z. B. als Ergebnis eines externen Signals)

Implementierung des Interface Runnable Bereitstellung der Methode void run()

Erzeugung eines Threads mit dem Konstruktor Thread(Runnable target)

Page 5: FH-Hof Threads Richard Göbel. FH-Hof Threads - Einführung Ein Thread ermöglicht die quasi-parallele Bearbeitung unterschiedlicher Aufgaben. Threads laufen

FH-Hof

Programmbeispiel - News Ticker Teil 1

JLabel display = new JLabel();

boolean tickerRunning = false;

class NewsTicker extends Thread {

private String news = ". . .";

private int l = 16;

public void run() {

int s;

while (tickerRunning) {

for (int i = -l; i <= news.length()-l; i++) {

if (i < 0) s = 0; else s = i;

display.setText(news.substring(s,i+l));

try{sleep(200);}

catch (InterruptedException e) {return;}}}}}

Page 6: FH-Hof Threads Richard Göbel. FH-Hof Threads - Einführung Ein Thread ermöglicht die quasi-parallele Bearbeitung unterschiedlicher Aufgaben. Threads laufen

FH-Hof

Programmbeispiel - News Ticker Teil 2

Thread startenThread ticker = new NewsTicker();

tickerRunning = true;

ticker.start();

Thread anhalten

tickerRunning = false;

Page 7: FH-Hof Threads Richard Göbel. FH-Hof Threads - Einführung Ein Thread ermöglicht die quasi-parallele Bearbeitung unterschiedlicher Aufgaben. Threads laufen

FH-Hof

Zustand eines Threads

Thread wurde erzeugt aber noch nicht gestartet

Thread wurde gestartet und läuft (runnable)

Thread wurde gestartet und wartet (not

runnable)

Methode „run“ des Thread wurde beendet

(dead)

Page 8: FH-Hof Threads Richard Göbel. FH-Hof Threads - Einführung Ein Thread ermöglicht die quasi-parallele Bearbeitung unterschiedlicher Aufgaben. Threads laufen

FH-Hof

Interface Runnable

Implementierung des Interface Runnable durch

eine beliebige Klasse:class MyClass implements Runnable {

. . .

public void run() {

. . .

}

}

Starten des ThreadMyClass c = new MyClass( . . . );

Thread aThread = new Thread(c);

aThread.start();

Page 9: FH-Hof Threads Richard Göbel. FH-Hof Threads - Einführung Ein Thread ermöglicht die quasi-parallele Bearbeitung unterschiedlicher Aufgaben. Threads laufen

FH-Hof

Problem: Synchronisation von Threads

Thread A Thread BPuffer für

Zeichenkette

ein Test

Dies istschreibt

liestDies ist

schreibt Dies ist

Page 10: FH-Hof Threads Richard Göbel. FH-Hof Threads - Einführung Ein Thread ermöglicht die quasi-parallele Bearbeitung unterschiedlicher Aufgaben. Threads laufen

FH-Hof

Synchronisation mit einem Monitor - Optionen

Deklaration einer Methode mit dem

Schlüsselwort synchronized

Deklaration eines Blocks mit dem Konstrukt

synchronized ( expression ) block

Die so markierten Anweisungen dürfen nicht

gleichzeitig :

auf das zugehörige Objekt für die Methode oder

auf das Ergebnisobjekt des Ausdrucks

angewendet werden

Der interne Scheduler blockiert bei Bedarf die

Ausführung von Anweisungen für ein Objekt

Page 11: FH-Hof Threads Richard Göbel. FH-Hof Threads - Einführung Ein Thread ermöglicht die quasi-parallele Bearbeitung unterschiedlicher Aufgaben. Threads laufen

FH-Hof

Verwendung des Konstrukts „synchronized“

Thread A Thread BStringBuffer b

synchronized (b) { . . . b.append( . . . ) . . . b.append( . . .) }

String s; . . .synchronized (b) { . . . s = new String(b); . . .} . . .

Page 12: FH-Hof Threads Richard Göbel. FH-Hof Threads - Einführung Ein Thread ermöglicht die quasi-parallele Bearbeitung unterschiedlicher Aufgaben. Threads laufen

FH-Hof

Manuelle Synchronisierung

Thread A Thread BObject o

synchronized (o) { . . . o.notify() . . .}

. . .synchronized (o) { . . . o.wait(); . . .} . . .

Page 13: FH-Hof Threads Richard Göbel. FH-Hof Threads - Einführung Ein Thread ermöglicht die quasi-parallele Bearbeitung unterschiedlicher Aufgaben. Threads laufen

FH-Hof

Probleme bei der Verwendung eines Monitors

Deadlock (Verklemmung): Threads greifen

wechselweise auf benötigte Ressourcen zu.

Starvation: Ein Thread wird aufgrund der

Arbeitsweise anderer Threads nie aufgerufen.

Lösung: Realisierung einer

Kommunikationsstruktur, die aus den

Rahmenbedingungen der Anwendung diese

Probleme ausschließt