Erstellung und Synchronisation von Java Threads


Seminararbeit, 2005

30 Seiten, Note: 1,0


Leseprobe

Inhaltsverzeichnis

Übersichtsverzeichnis

Verzeichnis der Codelistings

1 Motivation und Zielsetzung

2 Begriffsdefinitionen

3 Prinzipielle Möglichkeiten der Threadimplementierung in Java

4 Der Lebenszyklus eines Threads in Java
4.1 Ein Lebenszyklusmodell
4.2 Erzeugen eines Threads
4.3 Starten und Ausführen eines Threads
4.4 Deaktivieren eines Threads
4.5 Aktivieren eines Threads
4.6 Beenden eines Threads
4.7 Weitere Methoden der Klasse Thread

5. Synchronisation von Java Threads
5.1 Basiskonzepte für die Synchronisation von Java Threads
5.2 Synchronisation durch Semaphoren

6. Erweiterungen der Basisbibliotheken durch das Package java.util.concurrent

7. Ausblick

Literaturverzeichnis

Übersichtsverzeichnis

Abbildung 1- Steuerung mehrerer Threads durch die Java Virtual Machine

Abbildung 2 - Lebenszyklusmodell für einen Thread in Java

Tabelle 1 - Weitere Methoden der Klasse Thread im Überblick

Verzeichnis der Codelistings

Codelisting 1 – Vererbung von der Klasse java.lang.Thread

Codelisting 2 - Implementierung des Interfaces Runnable

Codelisting 3 - Demonstration der Methode join()

Codelisting 4 – Beendigung eines laufenden Threads

Codelisting 5 - Ein Konsumenten/Produzenten Beispiel

Codelisting 6 - Detaillierung der angedeuteten Methoden aus Codelisting 5

Codelisting 7 - Implementierung einer Semaphore

Codelisting 8 - Ein Konsumenten/Produzenten Szenario mit Hilfe einer Semaphore

Codelisting 9 - Detaillierung der Methoden produce, consume und print

Codelisting 10 - Implementierung eines CubbyHoles mittels Locks

Codelisting 11 - Detaillierung der Methoden get und put

1 Motivation und Zielsetzung

Die von Sun Microsystems entwickelte Programmiersprache Java wurde 1995 erstmals der Öffentlichkeit vorgestellt. Java wurde mit dem Ziel entwickelt, den Herausforderungen der Applikationsentwicklung in einer heterogenen, verteilten Umgebung erfolgreich zu begegnen.[1] Heute nutzen mehr als 3 Millionen Entwickler das Potenzial dieser Programmiersprache, die sich als De-facto-Standard für Network-Computing-Anwendungen etabliert hat.[2]

Als ein wesentliches Designziel für die Programmiersprache selbst, kann die Multithreadingfähigkeit angeführt werden. Sie soll es ermöglichen, mehrere Aktivitäten auf einem System gleichzeitig auszuführen, um ein hohes Maβ an Interaktivität für den Endnutzer zu sichern.[3] Die Nutzung von Threads rückte durch die zunehmende Verbreitung graphischer Interfaces in multitaskingfähigen Betriebssystemen in den Blickpunkt vieler Entwickler und wurde deshalb von Anfang an in Java integriert.[4] Die zukünftigen Potenziale der parallelen Programmierung werden sich mit kostengünstigen Multiprozessormaschinen noch verfielfachen. Alle von Sun Microsystems zur Verfügung gestellten Java Basissystembibliotheken sind heute schon „thread safe“ implementiert und können deshalb die Korrektheit ihrer Funktionalität auch bei einem Einsatz mehrerer Threads sicherstellen.[5]

Ziel dieser Seminararbeit soll die Darstellung und Dokumentation der Thread-fähigkeiten der Programmiersprache Java sein. Im Mittelpunkt werden dabei die von Java zur Verfügung gestellten Basisfunktionalitäten für die parallele Programmierung stehen. Threadgruppen (insbesondere die Klasse ThreadGroup) sind außen vorgelassen. Neben verbalen Erläuterungen unterstützen entsprechende Codebeispiele die Ausführungen exemplarisch.

2 Begriffsdefinitionen

Ein Thread soll im Folgenden als sequentieller Kontrollfluss von Anweisungen innerhalb eines Programms betrachtet werden.[6] Dabei kann ein Programm mehrere Threads beinhalten. Jeder Thread führt seine Anweisungen unabhängig von anderen Threads aus, es sei denn eine Kooperation zwischen Threads wird gestartet. Ein Thread hat exklusive Zugriffsrechte auf die ihm zugeordneten lokalen Variablen. Sollten zwei Threads die gleiche Methode ausführen, wird jeweils eine separate Kopie der lokalen Variablen der Methode angefertigt. Objekte und Instanzvariablen können aber auch bei entsprechender Berechtigung von mehreren Threads gemeinsam genutzt werden. Die mit dem Schlüsselwort static gekennzeichneten Variablen stehen allen Threads automatisch zur Verfügung.[7]

Multithreading bezeichnet die Fähigkeit eines Programms, mehrere Threads gleichzeitig abzuarbeiten. Abbildung 1 zeigt exemplarisch die Steuerung mehrerer Threads durch die Java Virtual Machine (JVM).

Abbildung in dieser Leseprobe nicht enthalten

Abbildung 1- Steuerung mehrerer Threads durch die Java Virtual Machine[8]

Eine sog. Synchronisation von Threads vermeidet die Ausführung zweier oder mehrerer Threads zur gleichen Zeit. Mit Hilfe sog. Locks wird es möglich, Objekte oder Klassen zu verschließen, sodass sie [temporär] nur noch von einem Thread genutzt werden können. Insbesondere bei der Manipulation von Datenstrukturen wird diesem Konzept eine hohe Bedeutung beigemessen.

3 Prinzipielle Möglichkeiten der Threadimplementierung in Java

Dieses Kapitel soll zunächst die prinzipiellen Möglichkeiten der Nutzung von Threads in Java vorstellen. Java stellt zwei Optionen zur Verfügung um Threads zu implementieren:

- Vererbung von der Klasse java.lang.Thread
- Implementierung des Interfaces java.lang.Runnable

Im Kontext der Vererbung von der Klasse java.lang.Thread wird das Überschreiben der leeren Methode run() notwendig, um die Aufgaben des Threads zu implementieren. Die Methode public void start() lässt die Ausführung eines Threads beginnen. Die JVM ruft in diesem Zusammenhang die Methode public void run() des Threads auf. Codelisting 1 zeigt die eben geschilderte Möglichkeit der Threadimplementierung.

Abbildung in dieser Leseprobe nicht enthalten

Codelisting 1 – Vererbung von der Klasse java.lang.Thread

Da Java jedoch konzeptionell keine Mehrfachvererbung unterstützt, existiert ebenso die Möglichkeit, Threads über das Interface java.lang.Runnable zu nutzen. Die das Interface implementierende Klasse muss die public void run() Methode überschreiben, um die Aufgaben des Threads festzulegen. Mit public void start() wird der Thread wie schon bei der Variante der Vererbung von der Klasse java.lang.Thread gestartet. Somit kann zusätzlich – neben der Einbindung der eigentlichen Multithreadfähigkeit – von einer anderen Klasse weitere Funktionalität geerbt werden. Codelisting 2 veranschaulicht die Implementierung des Interfaces java.lang.Runnable.

Abbildung in dieser Leseprobe nicht enthalten

Codelisting 2 - Implementierung des Interfaces Runnable

4 Der Lebenszyklus eines Threads in Java

Threads können sich in unterschiedlichen Zuständen befinden. Dieses Kapitel gibt zunächst an Hand eines Modells Aufschluss über den Lebenszyklus eines Threads in Java. Im Anschluss werden die einzelnen Zustandsübergänge detailliert erläutert.

4.1 Ein Lebenszyklusmodell

Mit der Java Version 1.5 wurde die Methode public Thread.state getState() eingeführt, mit der der aktuelle Zustand eines Threads ermittelt werden kann. Abbildung 2 zeigt neben allen Zuständen eines Threads in Java auch die für einen Zustandswechsel verantwortlichen Methoden bzw. Ereignisse. In Java wird nicht zwischen dem Zustand „runnable“ und „running“ unterschieden, da der Scheduler des Betriebssystems über die tatsächliche Ausführung des Threads entscheidet.

Abbildung in dieser Leseprobe nicht enthalten

Abbildung 2 - Lebenszyklusmodell für einen Thread in Java

[...]


[1] Vgl. Gosling / McGilton (1996), S. 11

[2] Vgl. Sun Microsystems, (2005)

[3] Vgl. Gosling / McGilton (1996), S. 14f

[4] Vgl. Oaks / Wong (1999), S. 9

[5] Vgl. Gosling / McGilton (1996), S. 15

[6] Vgl. Sun Microsystems 2 (2005)

[7] Vgl. Oaks / Wong (1999), S. 5f

[8] ebenda, 1999, S. 5

Ende der Leseprobe aus 30 Seiten

Details

Titel
Erstellung und Synchronisation von Java Threads
Hochschule
Martin-Luther-Universität Halle-Wittenberg  (Wirtschaftswissenschaftliche Fakultät)
Veranstaltung
Seminar Threads
Note
1,0
Autor
Jahr
2005
Seiten
30
Katalognummer
V41815
ISBN (eBook)
9783638400046
Dateigröße
1563 KB
Sprache
Deutsch
Schlagworte
Java, Threads, Seminar
Arbeit zitieren
Christian Seemann (Autor), 2005, Erstellung und Synchronisation von Java Threads, München, GRIN Verlag, https://www.grin.com/document/41815

Kommentare

  • Noch keine Kommentare.
Im eBook lesen
Titel: Erstellung und Synchronisation von Java Threads



Ihre Arbeit hochladen

Ihre Hausarbeit / Abschlussarbeit:

- Publikation als eBook und Buch
- Hohes Honorar auf die Verkäufe
- Für Sie komplett kostenlos – mit ISBN
- Es dauert nur 5 Minuten
- Jede Arbeit findet Leser

Kostenlos Autor werden