summaryrefslogtreecommitdiffstats
path: root/Master/Reference Architectures and Patterns/hjp5/html/k100144.html
blob: dcfd0d40e798675a96b39e446f13f1374527e653 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
<html>
<head>
<title>
Handbuch der Java-Programmierung, 5. Auflage
</title>
</head>
<body>
<a name="startofbody"></a>
<script language="JavaScript" src="hjp4lib.js">
</script>
<script language="JavaScript">
installKbdHandler("97,#startofbody;101,#endofbody;116,cover.html;122,k100003.html;115,search.html;105,index.html;100,JDKDOCS;112,APIDOCS;104,k100143.html;106,k100143.html;107,k100145.html;108,k100150.html");
</script>
<table border=0 cellpadding=0 cellspacing=1 width="100%">
<tr bgcolor="#EEFFCC">
<td width="7%" align=center bgcolor="#DDCC99"><a href="cover.html">&nbsp;Titel&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100003.html">&nbsp;Inhalt&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="search.html">&nbsp;Suchen&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html">&nbsp;Index&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/index.html" onClick="this.href=getDocIndex()">&nbsp;DOC&nbsp;</a>
<td align="right">Handbuch der Java-Programmierung, 5. Auflage
<tr bgcolor="#EEFFCC">
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100143.html">&nbsp;&lt;&lt;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100143.html">&nbsp;&nbsp;&lt;&nbsp;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100145.html">&nbsp;&nbsp;&gt;&nbsp;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100150.html">&nbsp;&gt;&gt;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/api/index.html" onClick="this.href=getApiIndex()">&nbsp;API&nbsp;</a>
<td align="right">Kapitel 22 - Multithreading
</table>
<hr>


<!-- Section -->
<a name="sectionthreads"></a>
<h2>22.1 Grundlagen und Begriffe </h2>
<hr>
<ul>
<li><a href="k100144.html#sectionthreads">22.1 Grundlagen und Begriffe</a>
</ul>
<hr>

<p>
Kaum eine wichtige Programmiersprache der letzten Jahre hat das Konzept
der <a name="ixa101461"><i>Nebenl&auml;ufigkeit</i></a> innerhalb
der Sprache implementiert. Mit Nebenl&auml;ufigkeit bezeichnet man
die F&auml;higkeit eines Systems, zwei oder mehr Vorg&auml;nge gleichzeitig
oder quasi-gleichzeitig ausf&uuml;hren zu k&ouml;nnen. Lediglich ADA
stellt sowohl parallele Prozesse als auch Mechanismen zur Kommunikation
und Synchronisation zur Verf&uuml;gung, die direkt in die Sprache
eingebettet sind. Durch Weiterentwicklungen im Bereich der Betriebssystemtechnologie
wurde allerdings das Konzept der <a name="ixa101462"><i>Threads</i></a>
immer popul&auml;rer und auf der Basis von Library-Routinen auch konventionellen
Programmiersprachen zur Verf&uuml;gung gestellt. 

<p>
Java hat Threads direkt in die Sprache integriert und mit den erforderlichen
Hilfsmitteln als Konstrukt zur Realisierung der Nebenl&auml;ufigkeit
implementiert. Ein Thread ist ein eigenst&auml;ndiges Programmfragment,
das parallel zu anderen Threads laufen kann. Ein Thread &auml;hnelt
damit einem <i>prozess</i>, arbeitet aber auf einer feineren Ebene.
W&auml;hrend ein prozess das Instrument zur Ausf&uuml;hrung eines
kompletten Programms ist, k&ouml;nnen innerhalb dieses Prozesses mehrere
Threads parallel laufen. Der Laufzeit-Overhead zur Erzeugung und Verwaltung
eines Threads ist relativ gering und kann in den meisten Programmen
vernachl&auml;ssigt werden. Ein wichtiger Unterschied zwischen Threads
und Prozessen ist der, dass alle Threads eines Programms sich einen
gemeinsamen Adre&szlig;raum teilen, also auf dieselben Variablen zugreifen,
w&auml;hrend die Adre&szlig;r&auml;ume unterschiedlicher Prozesse
streng voneinander getrennt sind. 

<p>
Die Implementierung von Threads war eine explizite Anforderung an
das Design der Sprache. Threads sollen unter anderem die Implementierung
grafischer Anwendungen erleichtern, die durch Simulationen komplexer
Abl&auml;ufe oft inh&auml;rent nebenl&auml;ufig sind. Threads k&ouml;nnen
auch dazu verwendet werden, die Bedienbarkeit von Dialoganwendungen
zu verbessern, indem rechenintensive Anwendungen im Hintergrund ablaufen.

<p>
Threads werden in Java durch die Klasse <a name="ixa101463"><a href="index_t.html#ixb100591"><font color=#000080><tt>Thread</tt></font></a></a>
und das Interface <a name="ixa101464"><a href="index_r.html#ixb101107"><font color=#000080><tt>Runnable</tt></font></a></a>
implementiert. In beiden F&auml;llen wird der Thread-Body, also der
parallel auszuf&uuml;hrende Code, in Form der &uuml;berlagerten Methode
<a name="ixa101465"><a href="index_r.html#ixb101108"><font color=#000080><tt>run</tt></font></a></a>
zur Verf&uuml;gung gestellt. Die Kommunikation kann dann durch Zugriff
auf die Instanz- oder Klassenvariablen oder durch Aufruf beliebiger
Methoden, die innerhalb von <a href="index_r.html#ixb101108"><font color=#000080><tt>run</tt></font></a>
sichtbar sind, erfolgen. Zur Synchronisation stellt Java das aus der
Betriebssystemtheorie bekannte Konzept des <a name="ixa101466"><i>Monitors</i></a>
zur Verf&uuml;gung, das es erlaubt, kritische Abschnitte innerhalb
korrekt geklammerter Programmfragmente und Methoden zu kapseln und
so den Zugriff auf gemeinsam benutzte Datenstrukturen zu koordinieren.

<p>
Dar&uuml;ber hinaus bietet Java Funktionen zur Verwaltung von Threads.
Diese erlauben es, Threads in Gruppen zusammenzufassen, zu priorisieren
und Informationen &uuml;ber Eigenschaften von Threads zu gewinnen.
Das Scheduling kann dabei wahlweise <i>unterbrechend</i> oder <i>nichtunterbrechend</i>
implementiert sein. Die Sprachspezifikation legt dies nicht endg&uuml;ltig
fest, aber in den meisten Java-Implementierungen wird dies von den
M&ouml;glichkeiten des darunter liegenden Betriebssystems abh&auml;ngen.
<hr>
<table border=0 cellpadding=0 cellspacing=1 width="100%">
<tr bgcolor="#EEFFCC">
<td width="7%" align=center bgcolor="#DDCC99"><a href="cover.html">&nbsp;Titel&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100003.html">&nbsp;Inhalt&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="search.html">&nbsp;Suchen&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html">&nbsp;Index&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/index.html" onClick="this.href=getDocIndex()">&nbsp;DOC&nbsp;</a>
<td align="right">Handbuch der Java-Programmierung, 5. Auflage, Addison
Wesley, Version 5.0.1
<tr bgcolor="#EEFFCC">
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100143.html">&nbsp;&lt;&lt;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100143.html">&nbsp;&nbsp;&lt;&nbsp;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100145.html">&nbsp;&nbsp;&gt;&nbsp;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100150.html">&nbsp;&gt;&gt;&nbsp;</a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/api/index.html" onClick="this.href=getApiIndex()">&nbsp;API&nbsp;</a>
<td align="right">&copy; 1998, 2007 Guido Kr&uuml;ger &amp; Thomas
Stark, <a href="http://www.javabuch.de">http://www.javabuch.de</a>
</table>
<a name="endofbody"></a>
</body>
</html>