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"> Titel </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100003.html"> Inhalt </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="search.html"> Suchen </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html"> Index </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/index.html" onClick="this.href=getDocIndex()"> DOC </a>
<td align="right">Handbuch der Java-Programmierung, 5. Auflage
<tr bgcolor="#EEFFCC">
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100143.html"> << </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100143.html"> < </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100145.html"> > </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100150.html"> >> </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/api/index.html" onClick="this.href=getApiIndex()"> API </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äufigkeit</i></a> innerhalb
der Sprache implementiert. Mit Nebenläufigkeit bezeichnet man
die Fähigkeit eines Systems, zwei oder mehr Vorgänge gleichzeitig
oder quasi-gleichzeitig ausführen zu können. Lediglich ADA
stellt sowohl parallele Prozesse als auch Mechanismen zur Kommunikation
und Synchronisation zur Verfü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ärer und auf der Basis von Library-Routinen auch konventionellen
Programmiersprachen zur Verfügung gestellt.
<p>
Java hat Threads direkt in die Sprache integriert und mit den erforderlichen
Hilfsmitteln als Konstrukt zur Realisierung der Nebenläufigkeit
implementiert. Ein Thread ist ein eigenständiges Programmfragment,
das parallel zu anderen Threads laufen kann. Ein Thread ähnelt
damit einem <i>prozess</i>, arbeitet aber auf einer feineren Ebene.
Während ein prozess das Instrument zur Ausführung eines
kompletten Programms ist, kö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ässigt werden. Ein wichtiger Unterschied zwischen Threads
und Prozessen ist der, dass alle Threads eines Programms sich einen
gemeinsamen Adreßraum teilen, also auf dieselben Variablen zugreifen,
während die Adreßrä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äufe oft inhärent nebenläufig sind. Threads kö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ällen wird der Thread-Body, also der
parallel auszuführende Code, in Form der überlagerten Methode
<a name="ixa101465"><a href="index_r.html#ixb101108"><font color=#000080><tt>run</tt></font></a></a>
zur Verfü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ü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über hinaus bietet Java Funktionen zur Verwaltung von Threads.
Diese erlauben es, Threads in Gruppen zusammenzufassen, zu priorisieren
und Informationen ü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ültig
fest, aber in den meisten Java-Implementierungen wird dies von den
Möglichkeiten des darunter liegenden Betriebssystems abhä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"> Titel </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100003.html"> Inhalt </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="search.html"> Suchen </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="index.html"> Index </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/index.html" onClick="this.href=getDocIndex()"> DOC </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"> << </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100143.html"> < </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100145.html"> > </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100150.html"> >> </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="../jdkdocs/api/index.html" onClick="this.href=getApiIndex()"> API </a>
<td align="right">© 1998, 2007 Guido Krüger & Thomas
Stark, <a href="http://www.javabuch.de">http://www.javabuch.de</a>
</table>
<a name="endofbody"></a>
</body>
</html>
|