Exkurs - Threads

Nebenläufige Prozesse (Threads)

Zu jedem Prozess gehört mindestens ein Thread ("Ausführungsstrang"), der Code des Programms ausführt. Hat ein Prozess mehrere Threads so können diese (von mehreren Prozessoren) parallel oder (beim Multitasking eines Prozessors) quasi parallel oder nebenläufig ausgeführt werden. Die einzelnen Threads eines Prozesses laufen in demselben Adressraum und können auf gleiche Daten zugreifen.

Anwendung von Threads in der Robotik

Ein Roboterprogramm kann zum Beispiel zwei Threads starten, wobei ein Programmteil den Fahralgorithmus ausführt und ein anderer (oder mehrere andere) sich gleichzeitig um die Auswertung der Sensorwerte kümmert.

Threads in Java

Im Java-Paket java.lang gibt es die Klasse Thread die über die öffentliche Methode start() verfügt:

Thread
...
+ start()

Um einen eigenen Thread zu programmieren, muss eine eigene Klasse geschrieben werden, die die Eigenschaften von der Thread-Klasse erbt. Der vom eigenen Thread auszuführende Code muss in einer Methode run() implementiert werden:

MyThread
...
+ run()

Die run-Methode wird beim Aufruf der (geerbten) Methode start() automatisch aufgerufen.

Beispiel:

Quellcode des eigenen Threads

 public class MyThread extends Thread {
     private Robot myRobot;          // Roboterobjekt
     private boolean ende;               // boolesche Variable zum Beenden des Threads
	 ...
	 
     // Konstruktor
     public MyThread(Robot roboter) {
        myRobot = roboter;
		...
        ende = false;
     }

     public void run() {
        // Abbruch über die boolsche Variable "ende"
        while (!ende) {
          // lies und verarbeite Sensorwerte
		  ...
       }
    }

    // Der Aufuruf dieser Methode führt zur Beendigung des Prozesses
    public void beenden() {
        ende = true;
    }
}

Quellcode des aufrufenden Prozesses

 public class Testklasse {
     private Robot myRobot;          // Roboterobjekt
	 private MyThread sensorController;  // Thread
     ...
	 
	 public static void main(String[] args) {
	    myRobot = new LegoRobot();
		sensorController = new MyThread(myRobot);

		...
		
		// Thread starten
		sensorController.start();
	
		...
		
		// Thread beenden
		sensorController.beenden();
		
		...

    }
}
X

Fehler melden

X

Suche