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();
...
}
}