30
Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 1 Multithreading Motivation und Grundlagen Threadzustände und Prioritäten Synchronisation Weiteres

PowerPoint - 12.Multithreadingssw.jku.at/Teaching/Lectures/PSW2/2005/Slides/12.Multithreading.pdf · Multithreading Threads in Java sind quasiparallele Programmabläufe innerhalb

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

Page 1: PowerPoint - 12.Multithreadingssw.jku.at/Teaching/Lectures/PSW2/2005/Slides/12.Multithreading.pdf · Multithreading Threads in Java sind quasiparallele Programmabläufe innerhalb

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 1�������������� ��������������

��������������������� ������

Multithreading

Motivation und Grundlagen

Threadzustände und Prioritäten

Synchronisation

Weiteres

Page 2: PowerPoint - 12.Multithreadingssw.jku.at/Teaching/Lectures/PSW2/2005/Slides/12.Multithreading.pdf · Multithreading Threads in Java sind quasiparallele Programmabläufe innerhalb

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 2�������������� ��������������

��������������������� ������

Multithreading

� Threads in Java sind quasiparallele Programmabläufe innerhalb einer VM

� Threads in Java sind mächtiges und bequemes Konzept, um nebenläufige Abläufe zu

realisieren, wie z.B.:

• Applikationslogik und Benutzerinteraktion bei GUI-Anwendungen

• interaktive Anwendungen bei denen mehrere Aktivitäten gleichzeitig laufen sollen

• Bedienung von mehreren gleichzeitigen Anforderungen am Server

• Animationen mit mehreren aktiven Agenten

• …

� Threads in Java laufen in einem gemeinsamen Speicherbereich

� Threads können/müssen kooperieren,

insbesondere bei gemeinsam benutzten Objekten (Shared Memory)

single-threaded multi-threaded

Page 3: PowerPoint - 12.Multithreadingssw.jku.at/Teaching/Lectures/PSW2/2005/Slides/12.Multithreading.pdf · Multithreading Threads in Java sind quasiparallele Programmabläufe innerhalb

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 3�������������� ��������������

��������������������� ������

Klassendiagramm (Auszug)

Page 4: PowerPoint - 12.Multithreadingssw.jku.at/Teaching/Lectures/PSW2/2005/Slides/12.Multithreading.pdf · Multithreading Threads in Java sind quasiparallele Programmabläufe innerhalb

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 4�������������� ��������������

��������������������� ������

Überblick über Klassen

� ������:

� ������-Objekte repräsentieren einen Thread

• definiert Methoden für starten, unterbrechen, …

• definiert ���-Methoden, um

- aktuell laufenden Thread zu steuern, z.B. ihn schlafen zu legen

- Verwaltung aller aktuell existierenden Threads

� � ������:

• Interface � ������ definiert Methode � ���� welche den von einem Threadauszuführenden Code beinhaltet

� ������ implementiert � ������

� ������ kann aber auch mit einem � ������-Objekt erzeugt werden

� �����:

• in Klasse ����� ist ein Monitor implementiert, d.h. jedes Objekt in Java kann zur Thread-Synchronisation verwendet werden

• wesentlichen Methoden sind �� und ����, bzw. �������

� ��������� �: Für das Bilden von Gruppen von Threads

� ����� ����������: Exception geworfen bei Unterbrechung

Page 5: PowerPoint - 12.Multithreadingssw.jku.at/Teaching/Lectures/PSW2/2005/Slides/12.Multithreading.pdf · Multithreading Threads in Java sind quasiparallele Programmabläufe innerhalb

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 5�������������� ��������������

��������������������� ������

Erzeugen, Starten, Ablauf eines Threads (1)

Variante: Ableiten von ������������������������

� Thread wird abgeleitet (z.B. ���������) und � ��� von � ������ überschrieben

� ������-Objekt wird mit ��� erzeugt

� Thread wird mit ����� gestartet und damit � ��� ausgeführt

� Der Thread läuft bis zum Ende der Methode � ��� und stirbt dann

� Die static-Methode ���������! "����erlaubt es, den aktuellen Thread für eine gegebene Zeit „Schlafen zu legen“

Achtung: ����� wirft ����� ���������� und muss daher mit ��#����-Anweisung geklammert werden

�������������������� � ���$��"� ������������������������ %$��"� &� ���� ���� ���� ��� '��'��'��'�� ��� �����(&

���(�()(������������ �������'���*���'��+������* ��������� ��������� ��������� ��������� �������������������� )()()()(������������ ����������� ����������� ����������� ������������*�*�*�*�����+��������+��������+��������+�����*��*��*��*

,+++

,

�������������������� ��������� ������������������������ ������ &� ���� ���� ���� ��� ���������� ��� � ����(&(�()(� ���*(

,

� ���� ���� ���� ��� '��'��'��'�� � ���(&�������� &

������������ ����� ()(-*((.)(-///*(00�(&�+"�'���*������+������1�*������+������1�*������+������1�*������+������1�*

,,���������������� ������ ���������� ��&,

,

��'����'����'����'�� ���(�*,

Beispiel: BallThread

Page 6: PowerPoint - 12.Multithreadingssw.jku.at/Teaching/Lectures/PSW2/2005/Slides/12.Multithreading.pdf · Multithreading Threads in Java sind quasiparallele Programmabläufe innerhalb

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 6�������������� ��������������

��������������������� ������

Erzeugen, Starten, Ablauf eines Threads (2)

Variante: Eigenes � ������� ������� ������� ������-Objekt

� Die Methode � ��� wird in einem eigenen � ������-Objekt implementiert (im Bsp. ���)

� ������-Objekt wird mit ��� erzeugt, wobei das � ������-Objekt als Parameter übergeben wird

� Thread wird mit ����� gestartet und damit � ��� des � ������-Objekts ausgeführt

�������������������� � ���$��"� ������������������������ %$��"� &� ���� ���� ���� ��� '��'��'��'�� ��� �����(&

���(�()( ���(�()( ���(�()( ���(�()(������������ �������'�� �������'�� �������'�� �������'���*�*�*�*���'��+������*������������������������ �������������������� )()()()(������������ ���������������������������������*�*�*�*�����+��������+��������+��������+�����*��*��*��*

,+++

,

�������������������� ���("���"���"���"���"���"���"���"��� � ������� ������� ������� ������ &++++++++++++

� ���� ���� ���� ��� '��'��'��'�� � ���(&�������� &

������������ ����� ()(-*((.)(-///*(00�(&"�'���*������+������1�*������+������1�*������+������1�*������+������1�*

,,���������������� ������ ���������� ��&,

,

+++,

Beispiel: BallThread

Page 7: PowerPoint - 12.Multithreadingssw.jku.at/Teaching/Lectures/PSW2/2005/Slides/12.Multithreading.pdf · Multithreading Threads in Java sind quasiparallele Programmabläufe innerhalb

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 7�������������� ��������������

��������������������� ������

Multithreading

Motivation und Grundlagen

Threadzustände und Prioritäten

Synchronisation

Weiteres

Page 8: PowerPoint - 12.Multithreadingssw.jku.at/Teaching/Lectures/PSW2/2005/Slides/12.Multithreading.pdf · Multithreading Threads in Java sind quasiparallele Programmabläufe innerhalb

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 8�������������� ��������������

��������������������� ������

Thread-Zustände

�� : wurde gerade erzeugt und noch nicht gestartet

�� ��2�!:

�3': wird gerade ausgeführt

����: kann ausgeführt werden und wartet auf Zuteilung des Prozessors

blockiert:

���������: wurde mit ����� schlafen gelegt

��4����3��: wartet auf Beendigung einer IO-Operation

������: wurde mit �� in den wartenden Zustand versetzt

!������: Wartet auf die Aufhebung einer Objekt-Sperre

� �������: durch � �������vorübergehend blockiert Achtung: ist veraltet und sollte nicht verwendet werden

�5 � ���4Methode hat terminiert

Page 9: PowerPoint - 12.Multithreadingssw.jku.at/Teaching/Lectures/PSW2/2005/Slides/12.Multithreading.pdf · Multithreading Threads in Java sind quasiparallele Programmabläufe innerhalb

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 9�������������� ��������������

��������������������� ������

Scheduling und Prioritäten

� Die lauffähigen Threads müssen sich den Prozessor zur Ausführung teilen; sie

konkurrieren um die Zuteilung des Prozessors

� Java legt keine Zuteilungsstrategie fest; diese ist abhängig vom Laufzeitsystem

Page 10: PowerPoint - 12.Multithreadingssw.jku.at/Teaching/Lectures/PSW2/2005/Slides/12.Multithreading.pdf · Multithreading Threads in Java sind quasiparallele Programmabläufe innerhalb

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 10�������������� ��������������

��������������������� ������

Scheduling und Prioritäten (2)

� Mit der Methode

'��'��'��'�� ��6��������6��������6��������6������ ������������������������

kann man einem Thread eine Priorität für die Zuteilung geben

� Prioritätswerte liegen zwischen 7�896������:()(/ und7�;96������:()(-/ mit 8��796������:()(1 als Standardwert

Beispiel: � ���������� (siehe Bsp.: '<+'<�-+ � ���������� in CoreJava)

� Mit der Methode ������������ '��'��'��'�� ������������������������

kann ein Thread seine Kontrolle des Prozessors abgeben und anderen die Chance zur Zuteilung geben.

� ���� ���� ���� ��� '��'��'��'�� ��� �������� ������(=����(������&

���(�()(������������ �������'���(������*���'��+������* ��������� ����� )(������������ ������������*�����+��6���������������+��6���������������+��6���������������+��6�����������*(�*(�*(�*(�����+�����*

, ���������s mit höherer

Priorität werden bevorzugt

bewegt

Page 11: PowerPoint - 12.Multithreadingssw.jku.at/Teaching/Lectures/PSW2/2005/Slides/12.Multithreading.pdf · Multithreading Threads in Java sind quasiparallele Programmabläufe innerhalb

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 11�������������� ��������������

��������������������� ������

Unterbrechung und Terminieren

� Unterbrechen von Threads durch void ���� ����� ����� ����� ���������

d.h., befindet sich der Thread in einem blockierten Zustand, wird eine ����� �������� geworfen und der Thread aktiviert.

� Mit static-Methode������������ ������������������������ ���� ������� ������� ������� �����������

wird für den aktuellen Thread der Interrupt-Status abgefragt und rückgesetzt (!)

� Interrupts sind für die außerordentliche Terminierung eines Threads wichtig

Anmerkung: Dieses Vorgehen kann die gefährliche ���-Anweisung ersetzen, die nicht mehr verwendet werden soll

� ���� ���� ���� ��� '��'��'��'�� � ���(&���������������� �>>>>���� ������� ������� ������� ������������(&( ##(�����?��##(�����?��##(�����?��##(�����?���������� &##(��(��"���!������-///�*(

,(���������������� ������ ���������� ��(& ##($��!�(##($��!�(##($��!�(##($��!�(���� ����� ����� ����� � �(�(�(�(������������������������ ����� ����� ����� ���*��*��*��* ##(� ��(����"���(##(� ��(����"���(##(� ��(����"���(##(� ��(����"���(���� ����� ����� ����� ���(� ����(� ����(� ����(� ��

##( "(##( "(##( "(##( "(���� ������� ������� ������� �����(���� (? (��?����(���� (? (��?����(���� (? (��?����(���� (? (��?��,

,##(��"�����

,

Page 12: PowerPoint - 12.Multithreadingssw.jku.at/Teaching/Lectures/PSW2/2005/Slides/12.Multithreading.pdf · Multithreading Threads in Java sind quasiparallele Programmabläufe innerhalb

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 12�������������� ��������������

��������������������� ������

Multithreading

Motivation und Grundlagen

Threadzustände und Prioritäten

Synchronisation

Weiteres

Page 13: PowerPoint - 12.Multithreadingssw.jku.at/Teaching/Lectures/PSW2/2005/Slides/12.Multithreading.pdf · Multithreading Threads in Java sind quasiparallele Programmabläufe innerhalb

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 13�������������� ��������������

��������������������� ������

Wechselseitiger Ausschluss

� Greifen mehrere Threads gleichzeitig auf ein Objekt zu, muss wechselseitiger

Ausschluss bei nicht-atomaren Operationen realisiert werden

� Beispiel: Banktransaktionen

• In einer Bankapplikation wird zwischen Konten Geld transferiert; Addieren und Subtrahieren sind nicht atomar

'��'��'��'�� ������������ ���"�(���� ��(���� �"� ��&

���� ��@���"A(4)(�"� �*���� ��@�A(0)(�"� �*

,

Page 14: PowerPoint - 12.Multithreadingssw.jku.at/Teaching/Lectures/PSW2/2005/Slides/12.Multithreading.pdf · Multithreading Threads in Java sind quasiparallele Programmabläufe innerhalb

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 14�������������� ��������������

��������������������� ������

Monitor

� Basisklasse ����� realisiert Monitor für wechselseitiger Ausschluss

� Monitor hat einen Schlüssel (Lock) und verwaltet eine Queue

• Threads können Lock anfordern

• werden eventuell in der Queue als wartend auf den Lock gespeichert

• bei Freiwerden des Locks erhält nächster in Queue den Lock und kann

Ausführung fortsetzen

� damit kann ein beliebiger Code (aber insbesondere eine Methode des

Objekts) unter exklusivem Zugriff auf das Objekt ausgeführt werden

� dies passiert, indem man eine Methode oder einen Block als

��������?����������?����������?����������?��

deklariert

Page 15: PowerPoint - 12.Multithreadingssw.jku.at/Teaching/Lectures/PSW2/2005/Slides/12.Multithreading.pdf · Multithreading Threads in Java sind quasiparallele Programmabläufe innerhalb

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 15�������������� ��������������

��������������������� ������

synchronized Methode

� Wird eine Methode als synchronized deklariert, muss bei Ausführung der Methode der

Lock des Objekts (��) erhalten werden

� Ist dieser nicht verfügbar, kann die Methode nicht begonnen und es muss auf die

Zuteilung des Locks gewartet werden

� Bei statischen Methoden wird auf das Klassenobjekt synchronisiert

�������������������� ��3(&+++��������?����������?����������?����������?�� '��'��'��'�� ������������ ���"�(���� ��(���� �"� ��(&

���� ��@���"A(4)(�"� �*���� ��@�A(0)(�"� �*

,+++

Methode gelockt auf

��-Objekt

Page 16: PowerPoint - 12.Multithreadingssw.jku.at/Teaching/Lectures/PSW2/2005/Slides/12.Multithreading.pdf · Multithreading Threads in Java sind quasiparallele Programmabläufe innerhalb

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 16�������������� ��������������

��������������������� ������

synchronized Block

� Blöcke können auf ein beliebiges Objekt synchronized werden

� Block kann nur betreten werden, wenn man den Lock des Objekts hat

�������������������� =��� "�� ������������������������ ������ &

��'����'����'����'�� ����� �*

+++

� ���� ���� ���� ��� '��'��'��'�� � ���(&���������������� �� �� �� �� ��(&

��������?����������?����������?����������?�� ���(&

##(!����3(� �(����3(�##(!����3(� �(����3(�##(!����3(� �(����3(�##(!����3(� �(����3(�

,,

,,

Block gelocktauf Objekt o

Page 17: PowerPoint - 12.Multithreadingssw.jku.at/Teaching/Lectures/PSW2/2005/Slides/12.Multithreading.pdf · Multithreading Threads in Java sind quasiparallele Programmabläufe innerhalb

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 17�������������� ��������������

��������������������� ������

�������� und ����������������

� Soll ein synchronisierter Code nicht fortgesetzt werden, kann er den Lock zurückgeben

und den Thread als „wartend auf das Objekt“ einreihen

� ����� stellt dazu Methoden zur Verfügung

���� der Thread wird als wartend auf das Objekt blockiert;

Lock auf das Objekt wird freigegeben

������! "�� � wie ��, zusätzlich erfolgt nach "�� Millisekunden

ein Interrupt

������ Es wird ein (!) auf das Objekt wartender Thread aufgeweckt

��������� Es werden alle auf das Objekt wartenden Threads

aufgeweckt

Beispiel: Warten bis Konto gefüllt

� ���� ���� ���� ��� ��������?����������?����������?����������?�� '��'��'��'�� ������������ ���"�(���� ��(���� �"� ���������������������� ����� ����������

&���������������� ����� ��@���"A(.(�"� ��

����*���� ��@���"A(4)(�"� �*���� ��@�A(0)(�"� �*���������*

,

Page 18: PowerPoint - 12.Multithreadingssw.jku.at/Teaching/Lectures/PSW2/2005/Slides/12.Multithreading.pdf · Multithreading Threads in Java sind quasiparallele Programmabläufe innerhalb

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 18�������������� ��������������

��������������������� ������

Multithreading

Motivation und Grundlagen

Threadzustände und Prioritäten

Synchronisation

Weiteres

Page 19: PowerPoint - 12.Multithreadingssw.jku.at/Teaching/Lectures/PSW2/2005/Slides/12.Multithreading.pdf · Multithreading Threads in Java sind quasiparallele Programmabläufe innerhalb

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 19�������������� ��������������

��������������������� ������

join

� Oft ist es notwendig einen Sohn-Thread zu erzeugen und den Ablauf mit

diesem abzustimmen

� Die Anweisung ��� erlaubt es, auf einen Thread zu warten, bis dieser

terminiert ist.

Beispiel:

������ ()(��������������������(& ##(�����"�(B �3�����('��(##(�����"�(B �3�����('��(##(�����"�(B �3�����('��(##(�����"�(B �3�����('��(������������������������

� ���� ���� ���� ��� '��'��'��'�� � ���(&

#C(������ ���������(C#

,,*(

+�����*(+���+���+���+�����*��*��*��* ##(����(��(##(����(��(##(����(��(##(����(��(������������������������ (��"���(��"���(��"���(��"���##(��?�(���(

Page 20: PowerPoint - 12.Multithreadingssw.jku.at/Teaching/Lectures/PSW2/2005/Slides/12.Multithreading.pdf · Multithreading Threads in Java sind quasiparallele Programmabläufe innerhalb

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 20�������������� ��������������

��������������������� ������

Thread-Gruppen

� Oft ist es sinnvoll und hilfreich Threads zu Gruppen zusammenzufassen, um

diese gemeinsam behandeln zu können

• z.B. alle Threads in der Gruppe zu unterbrechen

� Dazu dient die Klasse ��������� �, mit der eine hierarchische Gruppierung

von Threads erfolgen kann

� ��������� � erlaubt:

• Unterbrechen aller Threads in der Gruppe

• Exceptions, die innerhalb eines enthaltenen Threads auftreten, zu behandeln

• Zugriff auf die enthaltenen Threads

• Informationen über die enthaltenen Threads abfragen

� Threads können bei ihrer Erzeugung einer

��������� � zugeordnet werden

Page 21: PowerPoint - 12.Multithreadingssw.jku.at/Teaching/Lectures/PSW2/2005/Slides/12.Multithreading.pdf · Multithreading Threads in Java sind quasiparallele Programmabläufe innerhalb

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 21�������������� ��������������

��������������������� ������

Ende der Applikation und Daemon-Threads

� Eine Applikation wird beendet, wenn alle ihre Threads terminiert (tot) sind

� Eine Ausnahme bilden dabei aber die sogenannten Daemon-Threads;

diese werden automatisch beendet, wenn der letzte Nicht-Daemon-Thread einer

Applikation terminiert hat

� Daemon-Threads verwendet man daher für Hilfsdienste

� Threads können durch Setzen der daemon-Property mit

'��'��'��'�� ��D��"����D��"����D��"����D��"���������������������������������� ������������

zu Daemon-Threads gemacht werden

Page 22: PowerPoint - 12.Multithreadingssw.jku.at/Teaching/Lectures/PSW2/2005/Slides/12.Multithreading.pdf · Multithreading Threads in Java sind quasiparallele Programmabläufe innerhalb

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 22�������������� ��������������

��������������������� ������

Veraltete Methoden

stop:

• Mit ����� kann man einen Thread „töten“; er wird sofort terminiert

• sollte nicht verwendet werden, weil dadurch jede Aktion sofort beendet wird und

dadurch inkonsistente Zustände der bearbeiteten Objekte entstehen können

• Bsp. ��������� bei ��3: Es wird zwar von einem Konto noch abgehoben aber

auf das andere Konto nicht mehr gebucht

suspend / resume:

• Mit � ������� kann ein Thread vorübergehend blockiert und mit ��� "��� wieder

aufgeweckt werden

• dabei gibt er aber Locks von Objekten nicht frei (der Lock kann erst wieder frei

gegeben werden, wenn der Thread mit ��� "��� wieder aufgeweckt wird)

• Dadurch können sehr leicht Deadlocks entstehen, die Verwendung von suspend wird

nicht empfohlen

Page 23: PowerPoint - 12.Multithreadingssw.jku.at/Teaching/Lectures/PSW2/2005/Slides/12.Multithreading.pdf · Multithreading Threads in Java sind quasiparallele Programmabläufe innerhalb

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 23�������������� ��������������

��������������������� ������

Beispiel: BankAccounts (1)

� Transferieren von Geld zwischen Konten in mehreren Threads

� ���� ���� ���� ��� �������������������� B���� ��3��� &

� ���� ���� ���� ��� ������������ '��'��'��'�� "���B��!@A(��!��(& ��3(�()(������������ ��3�8�==�E8�B�(�8����F9 �F�8=��*���� *������������ �()(/*((.(8�==�E8�B*(00�(&

�������������� ()(������������ �����������������(��8����F9 �F�8=��*

+��6�����������+8��796������: 0((G(<�*+�����*

,,

� ���� ���� ���� ��� ������������ ���������������� ���� 8�==�E8�B()(-/*� ���� ���� ���� ��� ������������ ����(����(����(����(���� �8����F9 �F�8=�()(-////*

,

Page 24: PowerPoint - 12.Multithreadingssw.jku.at/Teaching/Lectures/PSW2/2005/Slides/12.Multithreading.pdf · Multithreading Threads in Java sind quasiparallele Programmabläufe innerhalb

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 24�������������� ��������������

��������������������� ������

Beispiel: BankAccounts (2)

�������������������� ��3(&

� ���� ���� ���� ��� ��3����� ��(���� ��� �������(&���� �� )(������������ ����@�A*���� *������������ �()(/*((.(���� ��+���!�*(00�

���� ��@A()(��� ������*�������� )(/*

,

� ���� ���� ���� ��� ��������?����������?����������?����������?�� '��'��'��'�� ������������ ���"�(���� ��(���� �"� ���������������������� ����� ���������� &

���������������� ����� ��@���"A(.(�"� ������*

���� ��@���"A(4)(�"� �*���� ��@�A(0)(�"� �*��������00*���������*

,

+++

��'��(����(��'��(����(��'��(����(��'��(����(����@A(���� ��*��'��(��'��(��'��(��'��(���!���!���!���! �������� )(/*

,

Page 25: PowerPoint - 12.Multithreadingssw.jku.at/Teaching/Lectures/PSW2/2005/Slides/12.Multithreading.pdf · Multithreading Threads in Java sind quasiparallele Programmabläufe innerhalb

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 25�������������� ��������������

��������������������� ������

Beispiel: BankAccounts (3)

�������������������� �������������� ������������������������ ������ &

� ���� ���� ���� ��� ��������������� ��3 ��(���� ���"�(���� "���(&���3 )(�*���"���� � )(���"*"���"� � )("��*

,

� ���� ���� ���� ��� '��'��'��'�� � ���(&�������� &

���������������� �>���� ������(&���� ����� � )(����������3+�?���(C(7��+�����"���*���� �"� � )(�������"���"� � C(7��+�����"���*���3+�����������"���� ��(����� ��(�"� ��*������-�*

,,����(����(����(����(������ ���������� ��(&,

,

��'����'����'����'�� ��3(���3*��'����'����'����'�� ���� ���"���� �*��'����'����'����'�� ���� "���"� �*

,

Page 26: PowerPoint - 12.Multithreadingssw.jku.at/Teaching/Lectures/PSW2/2005/Slides/12.Multithreading.pdf · Multithreading Threads in Java sind quasiparallele Programmabläufe innerhalb

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 29�������������� ��������������

��������������������� ������

API Zusammenfassung (1)

� ��� ����� ������������������������ "���"��� � ������A thread is a thread of execution in a program. The Java Virtual Machine allows an application to have multiple threads of execution running concurrently.

��������������������������Allocates a new Thread object.

�������������������������� ������ ��!��(Allocates a new Thread object with a Runnable object .

���������������������������������� � !�� ��(� ������ ��!��(Allocates a new Thread object with a Runnable object and assigns it to the group.

������� ���'����'����'����'���(Tests if this thread is alive.

������� �D��"���D��"���D��"���D��"����(Tests if this thread is a daemon thread.

������� ������ ��������� ��������� ��������� �����(Tests whether this thread has been interrupted.

��� ������� �����F��3�����F��3�����F��3�����F��3������ ����(Returns true if and only if the current thread holds the monitor lock on the specified object.

'�� � �� �� �� ���(� �("���� ������ ���� �����+(D��� ����! �� ���� �+(=���� �� � � "���� ��(�� � ������4����� � ��.

'�� ��D��"����D��"����D��"����D��"���������� ���(Marks this thread as either a daemon thread or a user thread.

'�� ��6������6������6������6������ ���6�����(Changes the priority of this thread.

��� '�� ������������������������! "����(Causes the currently executing thread to sleep (temporarily cease execution) for the specified number of milliseconds.

� ��� '�� ���� ����� ����� ����� ���(Interrupts this thread.

� ��� ����('�� ��������������(����� ����� ����������Waits for this thread to die.

��� '�� ������������������(Causes the currently executing thread object to temporarily pause.

Page 27: PowerPoint - 12.Multithreadingssw.jku.at/Teaching/Lectures/PSW2/2005/Slides/12.Multithreading.pdf · Multithreading Threads in Java sind quasiparallele Programmabläufe innerhalb

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 30�������������� ��������������

��������������������� ������

API Zusammenfassung (2)

� ��� ������� � ������� ������� ������� ������The Runnable interface should be implemented by any class whose instances are intended to be executedby a thread. The class must define a method of no arguments called run.

'�� � �� �� �� ���(When an object implementing interface Runnable is used to create a thread, starting the thread causes theobject's run method to be called in that separately executing thread.

� ��� ����� ����� ��������������� ��������������� ��������������� ���������� ������ �������Thrown when a thread is waiting, sleeping, or otherwise paused for a long time and another thread interrupts

it using the interrupt method in class Thread.

� ��� ����� ��������������������Class Object is the root of the class hierarchy. Every class has Object as a superclass. All objects, including

arrays, implement the methods of this class.

'�� ����������(Causes current thread to wait until another thread invokes the notify() method or the notifyAll() method forthis object.

'�� ������������! "�� �(Causes current thread to wait until either another thread invokes the

'�� ������������������(Wakes up a single thread that is waiting on this object's monitor.

'�� ������������������������������(Wakes up all threads that are waiting on this object's monitor.

Page 28: PowerPoint - 12.Multithreadingssw.jku.at/Teaching/Lectures/PSW2/2005/Slides/12.Multithreading.pdf · Multithreading Threads in Java sind quasiparallele Programmabläufe innerhalb

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 31�������������� ��������������

��������������������� ������

API Zusammenfassung (3)

� ��� ����� ��������� ���������� ���������� ���������� � ������ �����A thread group represents a set of threads. In addition, a thread group can also include other thread groups.

� ��'�=� ���'�=� ���'�=� ���'�=� ���(Returns an estimate of the number of active threads in this thread group.

� �� "������ "������ "������ "�����������@A ���(Copies into the specified array every active thread in this thread group and its subgroups.

� �� "������ "������ "������ "�����������@A ���(������� ��� ����(Copies into the specified array every active thread in this thread group.

� !�7��6����!�7��6����!�7��6����!�7��6������(Returns the maximum priority of this thread group.

��������� � !�6����!�6����!�6����!�6������(Returns the parent of this thread group.

'�� ���� ����� ����� ����� ���(Interrupts all threads in this thread group.

'�� ��D��"����D��"����D��"����D��"���������� ���"���(Changes the daemon status of this thread group.

'�� ��7��6������7��6������7��6������7��6������ ���(Sets the maximum priority of the group.

'�� ��� !�������� ��� !�������� ��� !�������� ��� !��������������� �(��������� ��(Called by the Java Virtual Machine when a thread in this thread group stops because of an uncaughtexception.

Page 29: PowerPoint - 12.Multithreadingssw.jku.at/Teaching/Lectures/PSW2/2005/Slides/12.Multithreading.pdf · Multithreading Threads in Java sind quasiparallele Programmabläufe innerhalb

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 32�������������� ��������������

��������������������� ������

Literatur

� Java Tutorial, Multithreading,

http://java.sun.com/docs/books/tutorial/essential/threads/index.html

� Horstmann, Cornell, Core Java 2, Band 2 - Expertenwissen, Markt und Technik, 2002:

Kapitel 1

� Krüger, Handbuch der Java-Programmierung, 3. Auflage, Addison-Wesley, 2003,

http://www.javabuch.de: Kapitel 22

Page 30: PowerPoint - 12.Multithreadingssw.jku.at/Teaching/Lectures/PSW2/2005/Slides/12.Multithreading.pdf · Multithreading Threads in Java sind quasiparallele Programmabläufe innerhalb

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 33�������������� ��������������

��������������������� ������

Programmbeispiele

� Erzeugen, Starten, Ablauf von Threads:

� Core Java 2: '<��-+ � ���������+��'�'<��-+ � ���������+��'�'<��-+ � ���������+��'�'<��-+ � ���������+��'�

� Scheduling und Prioritäten:

� Core Java 2: '<��-+ � ����������+��'�'<��-+ � ����������+��'�'<��-+ � ����������+��'�'<��-+ � ����������+��'�

� Synchronisation:

� Core Java 2: '<��-+B���� ��3���+��'�'<��-+B���� ��3���+��'�'<��-+B���� ��3���+��'�'<��-+B���� ��3���+��'�

Downloads:

� Die Beispiele zu Core Java 2 können von

http://www.horstmann.com/corejava.html

heruntergeladen werden

� Die Beispiele aus Handbuch der Java-Programmierung können von

http://www.javabuch.de

heruntergeladen werden