Java Reference
In-Depth Information
18.2 Parallele Programmierung
In objektorientierten Hamster-Programmen muss der Programmierer die Hamster explizit steuern
und koordinieren. Im dritten Band der Java-Hamster-Bücher („Parallele Programmierung spielend
gelernt mit dem Java-Hamster-Modell: Programmierung mit Java-Threads“ [Bol08]) werden die
Hamster selbstständig und müssen sich selbst koordinieren. Erreicht wird dies durch Nutzung des
Thread-Konzeptes von Java, mit dem parallele Programme entwickelt werden können.
Threads : Sie haben in diesem Buch gelernt, dass beim Start eines Programms die main-Prozedur
aufgerufen und die dortigen Anweisungen nacheinander in der angegebenen Reihenfolge ausgeführt
werden. Handelt es sich bei einer Anweisung um einen Prozeduraufruf, wird die Ausführung der
aktuellen Prozedur unterbrochen und in den Rumpf der aufgerufenen Prozedur gesprungen. Nach
dessen vollständiger Abarbeitung erfolgt ein Rücksprung an die Stelle des Prozeduraufrufs. Das
heißt, dass zu jedem Zeitpunkt immer nur eine Prozedur aktiv ist.
Mit Hilfe des Thread-Konzeptes ist es in Java nun möglich, dass mehrere Prozeduren in jeweils
einem sogenannten Thread gleichzeitig aktiv sind, also parallel zueinander ausgeführt werden. Rea-
lisiert werden kann das durch das Ableiten von Klassen von der vordefinierten Klasse Thread .In
Wirklichkeit handelt es sich bei der Parallelität um eine Pseudo-Parallelität, weil heutige Compu-
ter in der Regel ja nur einen einzelnen Prozessor besitzen. Ein interner Scheduler steuert, welchem
Thread zu welcher Zeit der Prozessor zugeteilt wird. Der Wechsel von einem Thread zu einem an-
deren erfolgt dabei derart schnell und oft, dass der Eindruck erweckt wird, die Prozeduren würden
tatsächlich gleichzeitig ausgeführt.
Die Klasse Hamster ist eine solche von der Klasse Thread abgeleitete Klasse. Gibt man Hamstern
den Befehl start , führen sie selbstständig und parallel zu anderen Hamstern die ihnen zugeordnete
Methode namens run aus. Im folgenden parallelen Hamster-Programm werden zwei selbstständige
Hamster gleichzeitig auf die Reise zur nächsten Wand geschickt. Wer sie als erster erreicht, hängt
unter anderem vom Scheduler ab.
class RunningHamster extends Hamster {
...
public void run() {
while (vornFrei()) {
vor();
}
}
}
void main() {
Hamster paul = new RunningHamster(0,0,Hamster.OST,0);
Hamster heidi = new RunningHamster(1,0,Hamster.OST,0);
paul.start();
heidi.start();
}
Kommunikation zwischen Hamstern : Um gemeinsam gegebene Probleme zu lösen, müssen selbst-
ständige Hamster miteinander kommunizieren, d.h. Daten austauschen können. Dies geschieht im
parallelen Java-Hamster-Modell über durch mehrere Hamster gemeinsam zugreifbare Variablen und
Objekte bzw. durch Aufruf von Methoden der anderen Hamster und der Übergabe der Daten als
Parameter.
Search WWH ::




Custom Search