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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
|
<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,k100147.html;107,k100149.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="k100147.html"> < </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100149.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="sectlevel2id022005"></a>
<h2>22.5 <a name="ixa101506">Verwalten von Threads</a></h2>
<hr>
<ul>
<li><a href="k100148.html#sectlevel2id022005">22.5 Verwalten von Threads</a>
<ul>
<li><a href="k100148.html#sectlevel3id022005001">22.5.1 Priorität und Name</a>
<li><a href="k100148.html#sectlevel3id022005002">22.5.2 Thread-Gruppen</a>
</ul>
</ul>
<hr>
<p>
Threads können in Java nicht nur ausgeführt und synchronisiert
werden, sondern besitzen auch eine Reihe administrativer Eigenschaften,
die besonders dann nützlich sind, wenn das Thread-Konzept stark
genutzt wird. Diese administrativen Eigenschaften lassen sich in zwei
Gruppen unterteilen. Zum einen gibt es Eigenschaften, die bei den
Threads selbst zu finden sind, beispielsweise die <i>Priorität</i>
oder der <i>Name</i> eines Threads. Zum anderen gibt es Eigenschaften,
die darauf begründet sind, dass jeder Thread in Java zu einer
<i>Thread-Gruppe</i> gehört, die untereinander über Vater-Kind-Beziehungen
miteinander in Verbindung stehen. Beide Gruppen von Eigenschaften
sollen im folgenden kurz erklärt werden.
<!-- Section -->
<a name="sectlevel3id022005001"></a>
<h3>22.5.1 Priorität und Name </h3>
<p>
Jeder Thread in Java hat einen eindeutigen Namen. Wird dieser nicht
explizit vergeben (beispielsweise im Konstruktor), so vergibt Java
einen automatisch generierten Namen der Form <font color="#000077"><tt>"Thread-"</tt></font>
+ n, wobei <font color="#000077"><tt>n</tt></font> ein <a href="index_i.html#ixb100244"><font color=#000080><tt>int</tt></font></a>
ist. Alternativ kann einem Thread mit der Methode <a name="ixa101507"><a href="index_s.html#ixb101133"><font color=#000080><tt>setName</tt></font></a></a>
auch vom Programm selbst ein Name zugewiesen werden:
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
<tr>
<td valign=top width=100%>
<font color="#660066">
<pre>
public void setName(String name)
</pre>
</font>
</td>
<td valign=top>
<a href="../jdkdocs/api/java/lang/Thread.html" onClick="this.href=getApiDoc('java.lang.Thread')"><font color="#660066" size=-1>java.lang.Thread</font></a></td>
</tr>
</table>
<p>
Mit Hilfe der Methode <a name="ixa101508"><a href="index_g.html#ixb100667"><font color=#000080><tt>getName</tt></font></a></a>
kann der Name eines Threads abgefragt werden:
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
<tr>
<td valign=top width=100%>
<font color="#660066">
<pre>
public String getName()
</pre>
</font>
</td>
<td valign=top>
<a href="../jdkdocs/api/java/lang/Thread.html" onClick="this.href=getApiDoc('java.lang.Thread')"><font color="#660066" size=-1>java.lang.Thread</font></a></td>
</tr>
</table>
<p>
Neben einem Namen besitzt ein Thread auch eine <i>Priorität</i>.
Die Priorität steuert den Scheduler in der Weise, dass bei Vorhandensein
mehrerer bereiter Threads diejenigen mit höherer Priorität
vor denen mit niedrigerer Priorität ausgeführt werden. Beim
Anlegen eines neuen Threads bekommt dieser die Priorität des
aktuellen Threads. Mit Hilfe der Methode <a name="ixa101509"><a href="index_s.html#ixb101134"><font color=#000080><tt>setPriority</tt></font></a></a>
kann die Priorität gesetzt und mit <a name="ixa101510"><a href="index_g.html#ixb101135"><font color=#000080><tt>getPriority</tt></font></a></a>
abgefragt werden:
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
<tr>
<td valign=top width=100%>
<font color="#660066">
<pre>
public void setPriority(int newPriority)
public int getPriority()
</pre>
</font>
</td>
<td valign=top>
<a href="../jdkdocs/api/java/lang/Thread.html" onClick="this.href=getApiDoc('java.lang.Thread')"><font color="#660066" size=-1>java.lang.Thread</font></a></td>
</tr>
</table>
<p>
Als Parameter kann an <a href="index_s.html#ixb101134"><font color=#000080><tt>setPriority</tt></font></a>
ein Wert übergeben werden, der zwischen den Konstanten <font color="#000077"><tt>Thread.MIN_PRIORITY</tt></font>
und <a name="ixa101511"><a href="index_m.html#ixb101136"><font color=#000080><tt>Thread.MAX_PRIORITY</tt></font></a></a>
liegt. Der Normalwert wird durch die Konstante <a name="ixa101512"><a href="index_n.html#ixb101137"><font color=#000080><tt>Thread.NORM_PRIORITY</tt></font></a></a>
festgelegt. In der aktuellen Version des JDK haben diese Konstanten
die Werte 1, 5 und 10.
<!-- Section -->
<a name="sectlevel3id022005002"></a>
<h3>22.5.2 <a name="ixa101513">Thread-Gruppen</a></h3>
<p>
<i>Thread-Gruppen</i> dienen dazu, Informationen zu verwalten, die
nicht nur für einen einzelnen Thread von Bedeutung sind, sondern
für eine ganze Gruppe. Weiterhin bieten sie Methoden, die auf
alle Threads einer Gruppe angewendet werden können, und sie erlauben
es, die Threads einer Gruppe aufzuzählen. In der Java-Klassenbibliothek
gibt es zu diesem Zweck eine eigene Klasse <a name="ixa101514"><a href="index_t.html#ixb101139"><font color=#000080><tt>ThreadGroup</tt></font></a></a>.
<p>
Der Einstieg zur Anwendung von Objekten der Klasse <a href="index_t.html#ixb101139"><font color=#000080><tt>ThreadGroup</tt></font></a>
ist die Methode <a name="ixa101515"><a href="index_g.html#ixb101140"><font color=#000080><tt>getThreadGroup</tt></font></a></a>
der Klasse <a href="index_t.html#ixb100591"><font color=#000080><tt>Thread</tt></font></a>.
Sie liefert das <a href="index_t.html#ixb101139"><font color=#000080><tt>ThreadGroup</tt></font></a>-Objekt,
dem der aktuelle <a href="index_t.html#ixb100591"><font color=#000080><tt>Thread</tt></font></a>
angehört. Alle Thread-Gruppen sind über eine Vater-Kind-Beziehung
miteinander verkettet. Mit Hilfe der Methode <a name="ixa101516"><a href="index_g.html#ixb101084"><font color=#000080><tt>getParent</tt></font></a></a>
von <a href="index_t.html#ixb101139"><font color=#000080><tt>ThreadGroup</tt></font></a>
kann die Vater-Thread-Gruppe ermittelt werden:
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
<tr>
<td valign=top width=100%>
<font color="#660066">
<pre>
public ThreadGroup getParent()
</pre>
</font>
</td>
<td valign=top>
<a href="../jdkdocs/api/java/lang/ThreadGroup.html" onClick="this.href=getApiDoc('java.lang.ThreadGroup')"><font color="#660066" size=-1>java.lang.ThreadGroup</font></a></td>
</tr>
</table>
<p>
Durch mehrfache Anwendung kann so die Wurzel aller Thread-Gruppen
ermittelt werden. Steht eine <a href="index_t.html#ixb101139"><font color=#000080><tt>ThreadGroup</tt></font></a>
ganz oben in der Hierarchie, so liefert die Methode <a href="index_g.html#ixb101084"><font color=#000080><tt>getParent</tt></font></a>
den Wert <a href="index_n.html#ixb100235"><font color=#000080><tt>null</tt></font></a>.
<p>
Um die Menge aller Threads zu bestimmen, die in der aktuellen Thread-Gruppe
und ihren Untergruppen enthalten sind, kann die Methode <a name="ixa101517"><a href="index_e.html#ixb101141"><font color=#000080><tt>enumerate</tt></font></a></a>
verwendet werden:
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
<tr>
<td valign=top width=100%>
<font color="#660066">
<pre>
public int enumerate(Thread[] list)
</pre>
</font>
</td>
<td valign=top>
<a href="../jdkdocs/api/java/lang/ThreadGroup.html" onClick="this.href=getApiDoc('java.lang.ThreadGroup')"><font color="#660066" size=-1>java.lang.ThreadGroup</font></a></td>
</tr>
</table>
<p>
<a href="index_e.html#ixb101141"><font color=#000080><tt>enumerate</tt></font></a>
erwartet ein Array von Threads, das beim Aufruf mit allen Threads,
die zu dieser Thread-Gruppe oder einer ihrer Untergruppen gehören,
gefüllt wird. Das Array sollte vor dem Aufruf bereits auf die
erforderliche Größe dimensioniert werden. Als Anhaltspunkt
kann dabei das Ergebnis der Methode <a name="ixa101518"><a href="index_a.html#ixb101142"><font color=#000080><tt>activeCount</tt></font></a></a>
dienen, die die Anzahl der aktiven Threads in der aktuellen Thread-Gruppe
und allen Thread-Gruppen, die die aktuelle Thread-Gruppe als Vorfahr
haben, angibt:
<p>
<table border=0 cellspacing=0 cellpadding=0 width=100% bgcolor="#EEFFCC">
<tr>
<td valign=top width=100%>
<font color="#660066">
<pre>
public int activeCount()
</pre>
</font>
</td>
<td valign=top>
<a href="../jdkdocs/api/java/lang/ThreadGroup.html" onClick="this.href=getApiDoc('java.lang.ThreadGroup')"><font color="#660066" size=-1>java.lang.ThreadGroup</font></a></td>
</tr>
</table>
<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="k100147.html"> < </a>
<td width="7%" align=center bgcolor="#DDCC99"><a href="k100149.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>
|