kramann.info
© Guido Kramann

Login: Passwort:










COACH2
1 Planung
2 Architektur
3 Anzeige
4 EEPROM
5 I2C
..5.1 MasterSendByte
..5.2 MasterSend2Bytes
..5.3 MasterReceiveByte
..5.4 MasterReceive2Bytes
6 UART
7 DFT
8 FFT
9 Planung2
10 Klassen
..10.1 AnzeigeTaster
..10.2 RS232
..10.3 MotorServo
..10.4 Drehgeber
..10.5 Sensor
..10.6 Funk
11 Adaption
..11.1 Programmiertechnik
..11.2 Evoopt
12 Fuzzy
..12.1 Uebungsaufgabe
..12.2 Fuzzygroesse
..12.3 Fuzzyset
..12.4 Lookuptable
13 Skript
..13.1 Funkkorrektur
..13.2 Skriptsprachen
..13.3 Anforderungen
..13.4 Agentensysteme
..13.5 Implementierung
..13.6 Experimente
14 Gesamtkonzept
..14.1 Skripterweiterung
..14.2 Makroverhalten
67 Echtzeitsysteme
..67.1 Einfuehrung
....67.1.1 Echtzeit
....67.1.2 Korrektheit
....67.1.3 Hardware
....67.1.4 Ziele
....67.1.5 Synchronprogramm
..67.2 Threads
....67.2.1 Java
....67.2.2 Synchronisierung
..67.3 COACH
....67.3.1 Kaskadenregler
....67.3.2 Zeitebene1
....67.3.3 Zeitebene2
....67.3.4 Zeitebene3
....67.3.5 Puck
....67.3.6 Puckschwarm
..67.4 RTAIlab
....67.4.1 Slax
....67.4.1 USB_Stick
....67.4.2 Sinus
..67.5 Semaphor
....67.5.1 Laufkatze
....67.5.2 Java
....67.5.3 Semaphor
..67.6 Audio
....67.6.1 wav
....67.6.2 Linux
..67.7 Lookup
....67.7.1 Fuzzy
....67.7.2 PWM
..67.8 NeuronaleNetze
....67.8.1 Neuron
....67.8.2 Backpropagation
....67.8.3 Umsetzung
....67.8.4 Winkelerkennung
..67.9 Internetprogrammierung
....67.9.1 Codegenerierung
....67.9.2 PHP_Programmierung
....67.9.3 PHP_OOP
....67.9.4 Java
....67.9.5 UDP
..67.10 DFT
..67.11 FFT
..67.12 Zustandsmaschine
..67.13 Fuzzy
....67.13.1 Fuzzylogik
....67.13.2 FuzzyRegler
....67.13.3 Uebung9
....67.13.5 Softwareentwicklung
......67.13.5.1 AgileSoftwareentwicklung
......67.13.5.2 FuzzyRegler
......67.13.5.3 Uebung
....67.13.6 Umsetzung
......67.13.6.1 FuzzyRegler
......67.13.6.2 Simulation
......67.13.6.3 Optimierung
......67.13.6.4 Uebung
....67.13.7 Haengependel
......67.13.7.1 Haengependel
......67.13.7.2 Simulation
......67.13.7.3 FuzzyRegler
......67.13.7.4 Optimierer
......67.13.7.5 Genetisch
....67.13.8 Information
....67.13.9 Energie

67.2.1 Parallelisierung von Prozessen mit Java

  • Im Kapitel "Threads" unterhalb des Hauptmenüpunktes "Java" finden Sie eine Übersicht über die Steuerbefehle, die von der Klasse Thread in Java bereitgestellt werden.
  • Im folgenden sollen einige Beispiele aufgezeigt werden, wie Threads in Java-Programmen erzeugt werden können.
  • Die Beispiele stehen ebenso unter Java/Threads zum Download zur Verfügung.

Verzweigung - thread001

  • Zwei Prozesse mA und mB werden erzeugt und parallel ausgeführt.
Verzweigung als Prozessfluss-Graph

Bild 67.2.1-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 67.2.1-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 67.2.1-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 67.2.1-3: Konsolenausgabe des obigen Programms

Verzweigen und wieder zusammenführen - thread002

  • Zwei Prozesse mA und mB werden erzeugt und parallel ausgeführt.
  • Dann werden beide Prozesse vom Hauptprogramm aus beobachtet und gestoppt, wenn beide Prozesse ihre Befehle abgearbeitet haben.
  • Angenommen beide Threads würden Berechnungen durchführen, die von einem Folgeprozess gebraucht würden, dann könnte durch diese Technik gewährleistet werden, dass vor der Weiterverarbeitung auch beide Berechnungen zuende durchgeführt wurden.
Verzweigung als Prozessfluss-Graph

Bild 67.2.1-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 67.2.1-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 67.2.1-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 67.2.1-6: Konsolenausgabe des obigen Programms