Parallelisierung von Prozessen mit Java
|
Verzweigung - thread001
|
Bild 0-1: Verzweigung als Prozessfluss-Graph
public class MeinThread extends Thread { MeinThread(String name) { setName(name); } public void run() { while(true) { System.out.print(" "+getName()); try { Thread.sleep(50); } catch(Exception e) { } } } }
Code 0-1: MeinThread.java - Von Klasse Thread erbende Java-Klasse "MeinThread"
public class Hauptprogramm { public static void pausieren() { try { Thread.sleep(5000); } catch(Exception e) { } } public static void main(String[] args) { MeinThread mA = new MeinThread("A"); MeinThread mB = new MeinThread("B"); System.out.println("\nThread A starten: mA.start();\n"); mA.start(); pausieren(); System.out.println("\nThread B starten: mB.start();\n"); mB.start(); pausieren(); System.out.println("\nThread A anhalten: mA.suspend();\n"); mA.suspend(); pausieren(); System.out.println("\nThread A weiterfuehren: mA.resume();\n"); mA.resume(); pausieren(); System.out.println("\nThread A und B anhalten: mA.stop();mB.stop();\n"); mA.stop(); mB.stop(); } }
Code 0-2: Hauptprogramm - Java-Programm, das zwei Thread-Objekte vom Typ "MeinThread" erzeugt und deren Methode "run" startet.
Thread A starten: mA.start(); A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A Thread B starten: mB.start(); B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A Thread A anhalten: mA.suspend(); B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B B Thread A weiterfuehren: mA.resume(); A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B Thread A und B anhalten: mA.stop();mB.stop();
Code 0-3: Konsolenausgabe des obigen Programms
Verzweigen und wieder zusammenführen - thread002
|
Bild 0-2: Verzweigung als Prozessfluss-Graph
public class MeinThread extends Thread { private int maxschritte; MeinThread(String name, int maxschritte) { this.maxschritte = maxschritte; setName(name); } public void run() { for(int i=0;i<maxschritte;i++) { System.out.print(" "+getName()+i); try { Thread.sleep(100); } catch(Exception e) { } } } }
Code 0-4: MeinThread.java - Neue von Klasse Thread erbende Java-Klasse "MeinThread"
public class Hauptprogramm { public static void pausieren() { try { Thread.sleep(500); } catch(Exception e) { } } public static void main(String[] args) { MeinThread mA = new MeinThread("A",10); MeinThread mB = new MeinThread("B",20); System.out.println("\nThread A und B starten: mA.start();mB.start();\n"); mA.start(); mB.start(); while( mA.isAlive() || mB.isAlive() ) { if(mA.isAlive() && mB.isAlive()) System.out.print("\n A_B_busy. \n"); else if(mA.isAlive()) System.out.print("\n A_busy. \n"); else if(mB.isAlive()) System.out.print("\n B_busy. \n"); pausieren(); } mA.stop(); mB.stop(); } }
Code 0-5: Hauptprogramm.java - Neues Hauptprogramm, das nach Erzeugen und Start zweier Prozesse auf deren Ende wartet.
Thread A und B starten: mA.start();mB.start(); A_B_busy. A0 B0 A1 B1 A2 B2 A3 B3 A4 B4 A_B_busy. A5 B5 A6 B6 A7 B7 A8 B8 A9 B9 A_B_busy. B10 B11 B12 B13 B14 B_busy. B15 B16 B17 B18 B19 B_busy.
Code 0-6: Konsolenausgabe des obigen Programms