Ausgewählte Programme: Kilian von Neumann-Cosel Oliver Falke Proseminar Palm Computing.
Beispielanwendung von Java Threads Vorträger:Koussetou Batawi Proseminar.
-
Upload
meinrad-lazar -
Category
Documents
-
view
107 -
download
2
Transcript of Beispielanwendung von Java Threads Vorträger:Koussetou Batawi Proseminar.
![Page 1: Beispielanwendung von Java Threads Vorträger:Koussetou Batawi Proseminar.](https://reader036.fdocuments.in/reader036/viewer/2022062623/55204d8249795902118d504e/html5/thumbnails/1.jpg)
Beispielanwendung von Java Threads
Vorträger:Koussetou Batawi
Proseminar
![Page 2: Beispielanwendung von Java Threads Vorträger:Koussetou Batawi Proseminar.](https://reader036.fdocuments.in/reader036/viewer/2022062623/55204d8249795902118d504e/html5/thumbnails/2.jpg)
Inhalt
•Data Structures and containers
•Message Queue•The circular linked List (Doppelt verkettete Kreisförmige Liste)
•Simple Synchronization Examples•Beispielanwendung von der Klasse Barrier•Beispielanwendung von der Klasse ProcessIt
•A Network Server Class
![Page 3: Beispielanwendung von Java Threads Vorträger:Koussetou Batawi Proseminar.](https://reader036.fdocuments.in/reader036/viewer/2022062623/55204d8249795902118d504e/html5/thumbnails/3.jpg)
Rolle der Message Queue
•MsgQueue ist eine Technik des IPC (Interprocess Communication) benutzt in Unix Systemen•Realisierung von Nachrichtenaustausch zwischen Threads in Java•Basiert auf der Vector-Klasse von Java
Zwei Methoden werden benutzt: •Eine Methode send(), um data zu anderem System zu schicken.- Eine Methode recv(), ist von einem System exekutiert damit eine data zu nehmen.
![Page 4: Beispielanwendung von Java Threads Vorträger:Koussetou Batawi Proseminar.](https://reader036.fdocuments.in/reader036/viewer/2022062623/55204d8249795902118d504e/html5/thumbnails/4.jpg)
Message Queue
import java.util.* ;public class MsgQueue{
Vector queue = new Vector ();
public synchronized void send (Object obj){queue.addElement (obj) ;
}public Synchronized Object recv() {
if (queue.size() == 0)return null;Object obj = queue.firstElement();
queue.removeElementAt (0);return obj;
}}
![Page 5: Beispielanwendung von Java Threads Vorträger:Koussetou Batawi Proseminar.](https://reader036.fdocuments.in/reader036/viewer/2022062623/55204d8249795902118d504e/html5/thumbnails/5.jpg)
Circular Linked List
• Container-Klasse• Doppeltverkettete Liste• Operationen
– Insert– Delete– Find– Locate– Get
![Page 6: Beispielanwendung von Java Threads Vorträger:Koussetou Batawi Proseminar.](https://reader036.fdocuments.in/reader036/viewer/2022062623/55204d8249795902118d504e/html5/thumbnails/6.jpg)
Beipiel:Modell Entwurf
nextprev
data
nextprev
data
next
prev
data
Class CircularListNode{
Object 0;
CircularListNode next;
CircularListNode prev;
}
![Page 7: Beispielanwendung von Java Threads Vorträger:Koussetou Batawi Proseminar.](https://reader036.fdocuments.in/reader036/viewer/2022062623/55204d8249795902118d504e/html5/thumbnails/7.jpg)
Methode insert();Public class CircularList{ pivate CircularListNode current; public synchronized void insert (Object o){ CircularListNode tn = new CircularListNode(); tn.o = 0; if(current = = null){ tn.next = tn.prev = tn; current = tn; }else{ tn.next = current; tn.prev = current.prev; current.prev.next = tn; current.prev = tn; }}• Rolle-Einfügen von Daten in der Liste.-Ein Arbeitzeiger der Klasse CircularListNode,der auf den Knotenpunkt zeigt hinter dem ein neues Element eingefügt wird
![Page 8: Beispielanwendung von Java Threads Vorträger:Koussetou Batawi Proseminar.](https://reader036.fdocuments.in/reader036/viewer/2022062623/55204d8249795902118d504e/html5/thumbnails/8.jpg)
public synchronized void delete(Object o){ CircularlistNode p = find(o); CircularlistNode next = p.next; CircularlistNode prev = p.prev; if(p = = p.next){ current = null; return;} prev.next = next; next.prev = prev; if(current = = p) current = next;
•Rolle -Löschen eines Elements aus der Liste indem man das Element in Parameter eingibt. -Suche des Element in der Liste, -Löschen des Elements.
Methode delete
![Page 9: Beispielanwendung von Java Threads Vorträger:Koussetou Batawi Proseminar.](https://reader036.fdocuments.in/reader036/viewer/2022062623/55204d8249795902118d504e/html5/thumbnails/9.jpg)
Methode find
Private CircularlistNode find(Object o){ CircularlistNode p = current; if(p = = null); throw new IllegalArgumentException(); do { if(p.o = = o) return p; p = p.next; }While (p = = current); throw new IllegalArgumentException();}
• Rolle -Suche nach bestimmten Element durch die Liste. - Zurückgabe des Elements -Fehler Meldung sonst.
![Page 10: Beispielanwendung von Java Threads Vorträger:Koussetou Batawi Proseminar.](https://reader036.fdocuments.in/reader036/viewer/2022062623/55204d8249795902118d504e/html5/thumbnails/10.jpg)
Methode locate();
public synchronized Object locate (Object o) { CircularlistNode p = current; do{ if(p.o.equals(o)) return p.o; p = p.next; } While (p! = current); throw new IllegalArgumentException(); }
• Rolle-suche nach einem bestimmten Datensatz in der Liste-Übergabe des Datensatzes als Parameter an die Methode.
![Page 11: Beispielanwendung von Java Threads Vorträger:Koussetou Batawi Proseminar.](https://reader036.fdocuments.in/reader036/viewer/2022062623/55204d8249795902118d504e/html5/thumbnails/11.jpg)
Methode getnext();
Public Synchronized Object getNext() { if (current = = null); return null; current = current.next; returncurrent.o; }}
• Rolle-Ausgabe des Datensatzes des Knoten nach dem Arbeitspeicher.-Incrementierung des Arbeitspeichers um eins.-Ausgabe des Datensatzes von Arbeitspeicher.
![Page 12: Beispielanwendung von Java Threads Vorträger:Koussetou Batawi Proseminar.](https://reader036.fdocuments.in/reader036/viewer/2022062623/55204d8249795902118d504e/html5/thumbnails/12.jpg)
x 21 3
1x
2
3
Thread unsafeProblem: Paralleles Einfügen und Löschen
1 32
insert (x)delete (2)
![Page 13: Beispielanwendung von Java Threads Vorträger:Koussetou Batawi Proseminar.](https://reader036.fdocuments.in/reader036/viewer/2022062623/55204d8249795902118d504e/html5/thumbnails/13.jpg)
2 3
1 2 3
1
x
x
INSERT();
1 x 3
DELETE();
Die Methoden sind synchronisiert
Thread safe Realisierung
![Page 14: Beispielanwendung von Java Threads Vorträger:Koussetou Batawi Proseminar.](https://reader036.fdocuments.in/reader036/viewer/2022062623/55204d8249795902118d504e/html5/thumbnails/14.jpg)
Thread safe Implementierung
• Performance Aspekte
• Nachteil: Zeitaufwand
• Vorteil: korrektes Verhalten bei mehreren Threads
• Containerklassen in Java 2, thread unsafe Realisierungen collection classes
![Page 15: Beispielanwendung von Java Threads Vorträger:Koussetou Batawi Proseminar.](https://reader036.fdocuments.in/reader036/viewer/2022062623/55204d8249795902118d504e/html5/thumbnails/15.jpg)
Wait Notify Synchronization
• Generell– Wait und notify können nur innerhalb einer
synchronisierten Region ausgeführt werden.
– Sie beziehen sich auf das entsprechend gesetzte Lock.
• Methode wait( )– Blockiert thread und gibt lock frei
• Methode notify( )– Weckt einen wartenden Thread auf.
– Dieser wartet aber auf lock.
• Methode notifyAll( )– Weckt alle artenden Threads auf.
![Page 16: Beispielanwendung von Java Threads Vorträger:Koussetou Batawi Proseminar.](https://reader036.fdocuments.in/reader036/viewer/2022062623/55204d8249795902118d504e/html5/thumbnails/16.jpg)
Barrier
• Synchronisation aller Threads• Barrier-Klasse• Mehrere Synchronisationspunkte werden durch
eigene Barrier-Objekte realisiert.
![Page 17: Beispielanwendung von Java Threads Vorträger:Koussetou Batawi Proseminar.](https://reader036.fdocuments.in/reader036/viewer/2022062623/55204d8249795902118d504e/html5/thumbnails/17.jpg)
Barrier: WaitForRest
class barrier { private int threads2wait4; ..... public Synchronized int waitForRest(){ int threadNum = --threads2wait4;
if(threads2wait4 <= 0){ notifyAll(); return threadNum; }
if (threads2Wait4>0){ wait(); return threadNum; } } }
![Page 18: Beispielanwendung von Java Threads Vorträger:Koussetou Batawi Proseminar.](https://reader036.fdocuments.in/reader036/viewer/2022062623/55204d8249795902118d504e/html5/thumbnails/18.jpg)
Vergleich zwischen Barrier und join() Methoden
Thread 1
Thread 2
Thread 3
Thread 4
Thread 1
Thread 2
Thread 3Thread 4
Thread 1
Thread 5
Thread 6Thread 7
Thread 1
Thread 2
Thread 3
Thread 4
![Page 19: Beispielanwendung von Java Threads Vorträger:Koussetou Batawi Proseminar.](https://reader036.fdocuments.in/reader036/viewer/2022062623/55204d8249795902118d504e/html5/thumbnails/19.jpg)
Methode Join();Class Thread1 implement Runnable{ Thread2 aufgabe2; Thread3 aufgabe3; Thread4 aufgabe4; .... public void runn( ){ aufgabe2 = new Thread2; aufgabe2.start( ); aufgabe3 = new Thread3; aufgabe3.start( ); aufgabe4 = new Thread4; aufgabe4.start( ); aufgabe1(); aufgabe2.join(); aufgabe3.join(); aufgabe4.join(); ... }}
![Page 20: Beispielanwendung von Java Threads Vorträger:Koussetou Batawi Proseminar.](https://reader036.fdocuments.in/reader036/viewer/2022062623/55204d8249795902118d504e/html5/thumbnails/20.jpg)
class Thread1 implements Runnable{ ... Thread4 aufgabe4; Thread5 aufgabe5; Thread6 aufgabe6; Thread7 aufgabe7; Public void runn( ){ ... aufgabe4.join();
aufgabe5 = new Thread5; aufgabe5.start( ); aufgabe6 = new Thread6; aufgabe6.start( ); aufgabe7 = Thread7; aufgabe7 .start( ); aufgabe5.join(); aufgabe6.join(); aufgabe7.join(); }}
![Page 21: Beispielanwendung von Java Threads Vorträger:Koussetou Batawi Proseminar.](https://reader036.fdocuments.in/reader036/viewer/2022062623/55204d8249795902118d504e/html5/thumbnails/21.jpg)
Barrier Beispielpublic class processIt implement Runnable{ Barrier bp1=new(4); Barrier bp1b=new(4); Barrier bp2=new(4); Barrier bp2b=new(4); Barrier bpStart=new(4); Barrier bpEnd=new(4);
public void runn(){ int I = bpStart.waitForRest();
doPhaseOne(is [i] ); if(bp1.waitForRest() == 0) doPhaseTwoSetup(); bp1b.waitForRest(); doPhaseTwo(is[i]); if(bp2.waitForRest() == 0) doPhaseThreeSetup(); bp2b.waitForRest(); doPhaseThree(is[i]); bpEnd.waitForRest(); }}
![Page 22: Beispielanwendung von Java Threads Vorträger:Koussetou Batawi Proseminar.](https://reader036.fdocuments.in/reader036/viewer/2022062623/55204d8249795902118d504e/html5/thumbnails/22.jpg)
Vor- und Nachteile von Barrier
• Nachteile:zeit aufwand bei Thread Implementierung mit Barrier Klasse.
• Vorteile:In dieser java Bibliothek sind Methoden synchronisiert also verfügbar überall
![Page 23: Beispielanwendung von Java Threads Vorträger:Koussetou Batawi Proseminar.](https://reader036.fdocuments.in/reader036/viewer/2022062623/55204d8249795902118d504e/html5/thumbnails/23.jpg)
A Network server class
Clt1 soc
Clt2 soc
Cltn soc
Socket(server)
Socket(data)
Socket(data)
Socket(data)Socket(data)
Verbindung zwischen Clients und Server
![Page 24: Beispielanwendung von Java Threads Vorträger:Koussetou Batawi Proseminar.](https://reader036.fdocuments.in/reader036/viewer/2022062623/55204d8249795902118d504e/html5/thumbnails/24.jpg)
Class TCPserver
Import java.net.* ; Import.io.* ;
public class TCPServer implements cloneable,Runnable{ Thread runner = null; serverSocket server = null; socket data = null; boolean shouldStop = false; public synchronized void startServer (int port) throws IOException{ if(runner = = null){ server = new serverSocket(port); runner = new Thread(this); runner.start(); } }
![Page 25: Beispielanwendung von Java Threads Vorträger:Koussetou Batawi Proseminar.](https://reader036.fdocuments.in/reader036/viewer/2022062623/55204d8249795902118d504e/html5/thumbnails/25.jpg)
Methode stopServer
public synchronized void stopServer( ){ if(server != null) { shouldStop = true; runner.interrupt( ); runner = null; try{ server closed( ); }catch (IOException ioe){ } server = null; } }
![Page 26: Beispielanwendung von Java Threads Vorträger:Koussetou Batawi Proseminar.](https://reader036.fdocuments.in/reader036/viewer/2022062623/55204d8249795902118d504e/html5/thumbnails/26.jpg)
Methode runpublic void run(){ if(server != null){ While(!shouldStop){ Try{ Socket datasocket = server.accept(); TCPServer newSocket = (TCPServer) close(); newsocket.server = null; newsocket.data = datasocket ; newsocket.runner = new Thread(newSocket); newsocket.runner.start(); }catch{Exception e} {} } }else{ run(data); } }public void run socket data{ } }.
![Page 27: Beispielanwendung von Java Threads Vorträger:Koussetou Batawi Proseminar.](https://reader036.fdocuments.in/reader036/viewer/2022062623/55204d8249795902118d504e/html5/thumbnails/27.jpg)
Zusammenfassung
• Data structures and Containers :– Mit MsgQueue ;eine Technik des IPC in Unix,damit erzeugenes
objekt zwischen threads passt– Implementierung einer Doppelt Verkettete Kreisförmige Liste und
das Speichern von zusammengehörenden Daten.• Simple Synchronization Examples
– mit Anwendung von Barrier wo die wait(),notify()und notifyAll() Methoden sind benutzt und machen den Unterschied zwischenSafe und Unsafe Threads.
– Barrier ist von ProcessIt Class benutzt– Da wird auch einen Vergleich zwischen Barrier Klasse und join()
Methode gemacht.• Network Server Class
– Diese Klasse zeigt die Beziehung zwischen Clients und Server