Threads in Java Threads Sprachumfang von Java Der
- Slides: 11
Threads in Java • Threads Sprachumfang von Java • Der Java-Standard fordert nur die Unterstützung von Thread-Prioritäten. • Es gibt keine Forderung bzgl. : – Verdrängendes/kooperierendes Umschalten – Zeitverteilungsstrategie (Round Robin etc. )
Benutzung von Threads • Spezialisierung der Klasse java. lang. Thread • Implementierung des Interface java. lang. Runnable • Thread. start(): Asynchrone nebenläufige Ausführung von run() Class My. Thread 1 extends Thread {. . . public void run() {. . . } Class My. Thread 2 implements Runnable {. . . public void run() {. . . }. . My. Thread 1 mt 1 = new My. Thread 1(); mt 1. start(); My. Thread 2 mt 2 = new Thread thr = new Thread(mt 2); thr. start(); . . .
Synchronisation mit Monitoren • Monitore überwachen kritische Bereiche (KB): – KB ist Teil des Programmcodes – Höchstens ein Thread im KB • Ablauf: – Anmeldung des Threads (T) beim Monitor (M) – T blockiert – Wenn KB frei ist Aktivierung von Tdurch M (T belegt M) – Wenn T KB verlässt Signalisierung an den Monitor (T gibt M frei)
Monitore in Java • Jedes Java-Objekt ist ein Monitor. • Syntax: synchronized (obj) {. . . Kritischer Bereich. . . } • Spezialsyntax für kritische Methodenaufrufe: synchronized Type method(. . . ) {. . . } entspricht Type method(. . . ) { synchronized(this) {. . . } }
Explizite Synchronisation • 3 Methoden zur Freigabe von Monitoren: – wait() Blockierung des Threads – notify() Deblockierung eines Threads des Monitors – notify. All() Deblockierung aller Threads des Monitors
Lebenszyklus eines Threads (vereinfacht) sleeping interrupt() sleep() start() Scheduler runnable wait(), join() blocked notify(), Interrupt() Terminierung von run() end running
Beispiel: Producer/Consumer • System besteht aus drei Objekten: – Producer erzeugt regelmäßig Daten, – Consumer verarbeitet diese Daten. – Datenspeicherung in einem Depot Producer Depot Consumer • Es soll keine Rechenzeit vergeudet werden: – Keine Erzeugung bei vollem Depot. – Keine Consumer-Aktivität ohne Daten • Aber: Nebenläufige Erzeugung/Verarbeitung
Depot class Depot { private int buffer=-1; private boolean empty = true; synchronized int get. Content() throws Interrupted. Exception { while( empty) { wait(); } // warte bis gefüllt int res = buffer; empty = true; // kopiere Ergebnis notify(); // signalisiere leeres Depot return res; } synchronized void put. Content( int content) throws Interrupted. Exception { while ( ! empty ) { wait(); } // warte bis Depot leer buffer = content; empty = false; // fülle Depot notify(); // signalisiere volles Depot return; } }
Producer class Producer extends Thread { private Depot my. Depot; Producer( Depot dep) { my. Depot = dep; } public void run() Erzeugen der Daten { int i = 0; while( true ) { i++; try { my. Depot. put. Content(i); }Übergeben ans Depot catch( Interrupted. Exception ex ) {} }
Consumer class Consumer extends Thread { private Depot my. Depot; Consumer( Depot dep ) Holen der Daten { my. Depot = dep; } public void run() { while( true ) { try { int i = my. Depot. get. Content(); } catch (Interrupted. Exception ex) {} System. out. println(i); } } } Verarbeiten der Daten
Zusammenstöpseln package vs 99. ex 1; // hier die vorherigen Klassendefinitionen class Thread. Demo { public static void main(String args[]) { // Konfiguration des Systems Depot dep = new Depot(); Producer prod 1 = new Producer(dep); Consumer con 1 = new Consumer(dep); // Starten des Systems con 1. start(); prod 1. start(); } }
- Java shared memory
- Threads java
- Threads em java
- Wind von backbord weicht wind von steuerbord
- Erasmus von rotterdam beeinflusst von
- Ich würde dich nicht von der bettkante stoßen
- Gerd von der lippe holmenkollstafetten
- Lehre von einer anziehungskraft
- Die kleine ameise
- Besonderheiten von der erde
- Kokosfett verseifungszahl
- Von der hexe die einen drachen heiratet