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