• Keine Ergebnisse gefunden

Prozesse und Threads Threads

N/A
N/A
Protected

Academic year: 2022

Aktie "Prozesse und Threads Threads"

Copied!
5
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Threads

parallele Prozesse auf

sequenziellen Prozessoren

Prozesse und Threads

Es gibt zwei unterschiedliche Programme:

Ein Process ist ein typisches Programm, mit eigenem Addressraum im Speicher.

Ein Thread ist eine Sequenzfolge von Operationen innerhalb eines Prozesses.

Mehrere Threads in einem Prozess teilen sich denselben Adressraum.

(2)

Parallele Prozesse

Thread 3 Thread 2 Thread 1

Zeit

Threads laufen nur quasi-parallel!

In Wirklichkeit läuft jeder Thread nur für sehr kurze Zeit und gibt dann Kontrolle an den nächsten Thread ab.

Thread class

Einfaches erzeugen eines Threads:

• Eigene Klasse von java.lang.Thread ableiten.

• Eigenen Kode in die run() Methode schreiben.

• Thread mit der start() Methode starten.

(3)

Threads: ein Beispiel

class Programm{

public static void main (String[] arg){

CharPrinter thread1 = new CharPrinter('.');

CharPrinter thread2 = new CharPrinter('*');

thread1.start();

thread2.start();

System.out.print('+');

} }

public class CharPrinter extends Thread{

char signal;

public CharPrinter (char ch) { signal = ch;}

public void run() {

for(int i =0; i<20;i++){

System.out.print(signal);

int delay = (int) (Math.random() * 400);

try {sleep(delay);}

catch(Exception e){return;}

} } }

Threads und externe Daten

Wenn Threads externe Daten verändern, bedarf dies spezieller Kontrolle!

void deposit (int x){

balance = balance + x;

}

Thread 1

deposit (500);

Thread 2

withdraw (100);

void withdraw (int x){

balance = balance - x;

}

(4)

Synchronisation von Threads

Ist eine Methode als synchronized deklariert verhindert Java, dass eine andere synchronized-Methode aktiv wird.

class Account { int balance = 0;

……

synchronized void deposit (int x){ balance = balance + x;}

synchronized void withdraw (int x){ balance = balance - x;}

}

Synchronized bei langen Methoden

synchronized kann in die Methode hineingezogen werden

um den relevanten Block zu schüzen.

synchronized void myMethod (int x) { ……

balance = balance + x;

… }

Vorteil ist, dass nur der wichtige Teil blockiert wird, ansonsten sind beide Versionen gleichwertig.

Nachteil, der Bytecode wird etwas länger.

void myMethod (int x) { ……

synchronized (this) {

balance = balance + x;

}

… }

(5)

wait() und notify()

Threads werden im Allgemeinen automatisch verwaltet .

1. Möglichkeit:

B verändert eine Variable deren Zustand als Nachricht dient und A fragt den Zustand dieser Variablen permanent ab.

Nachteil: Thread A muss immer im Abfragezyklus bleiben und kann nicht ganz anhalten.

Wenn jedoch Thread A genau dann starten soll wenn Thread B abgearbeitet ist, muss B dies A mitteilen .

2. Möglichkeit

wait() und notify() Methoden der Klasse Objekt verwenden.

wait() und notify() (2)

Die wait()-Methode wird innerhalb einer syncronized Anweisung (Block) verwendet.

Sobald die wait()-Methode ausgeführt wird, können andere syncronized Anweisungen starten und der Thread wartet bis er benachrichtigt wird.

Die notify()-Methode wird ebenfalls innerhalb einer syncronized Anweisung aufgerufen. Beim Aufruf benachrichtigt sie einen Thread der wartet.

Warten mehrere, dann wird ein zufälliger benachrichtigt.

class MyClass {

…… // Tread A

public synchronized void waitForMessage(){

Referenzen

ÄHNLICHE DOKUMENTE

Sollten die zwei Punkte eine Sprechpause andeuten, erwartet der Leser eine weitere Äußerung des Schreibers Lelika, ansonsten erwartet er im weiteren Verlauf eine Reaktion

In unserem Beispiel l¨auft der Thread nicht lang: Er erzeugt einige Male die Ausgabe eines Strings und wird dann beendet.. Abbildung 2 illustriert

Threads wurden von dieser Gruppe minimalistisch eingesetzt: Um zu verhindern, dass ein Thread anfängt mit Daten zu arbeiten, die von einem anderen Thread noch nicht vollständig über

The basic rule for using mutual exclusion is straightforward: in a multi-threaded program all shared mutable data must be protected by associating it with some mutex, and you

• Funktion blockiert, bis ¨ uber einen Deskriptor readfds, writefds oder exceptfds Daten gelesen oder geschrieben werden k¨ onnen bzw. eine Datei ihren Status

➥ Anmerkung: alle Modelle in diesem Abschnitt gelten in der selben Form auch f ¨ur klassische Prozesse (mit genau einem Thread)... 2.2

Erweitern Sie das Programm so, daß ein zweiter Thread erzeugt wird, der eine Referenz auf dasselbe Objekt erh¨alt. Warten Sie vor dem Ausdrucken der Zahl, bis auch dieser Thread

In this paper, we propose the analysis of a news data stream using article threads, a relevance-based technique that turns the stream of news articles into threads by re- taining