16.11.2013 Aufrufe

Programmieren in Java - HostFiXX.de

Programmieren in Java - HostFiXX.de

Programmieren in Java - HostFiXX.de

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

<strong>Programmieren</strong> <strong>in</strong> <strong>Java</strong><br />

<strong>in</strong>terrupt() erneut aufgerufen wird, wird das Flag wie<strong>de</strong>r gesetzt und run() die<br />

Abbruchauffor<strong>de</strong>rung signalisiert.<br />

public f<strong>in</strong>al void jo<strong>in</strong>() throws InterruptedException<br />

Mit Hilfe dieser Metho<strong>de</strong> kann gezielt auf die Beendigung e<strong>in</strong>es Thread gewartet<br />

wer<strong>de</strong>n. So etwas ist s<strong>in</strong>nvoll, wenn zeitaufwendige Operationen vor <strong>de</strong>m Aufruf<br />

e<strong>in</strong>er Folgeoperation noch been<strong>de</strong>t wer<strong>de</strong>n müssen. Der zeitaufwendigsten<br />

Operation ist e<strong>in</strong> eigener Thread zugeordnet.<br />

public static void yield()<br />

“Freiwilliges” Angebot <strong>de</strong>s laufen<strong>de</strong>n Thread, <strong>de</strong>n Prozessor abzugeben.<br />

Unterbrechen e<strong>in</strong>es Thread: Mit Hilfe <strong>de</strong>r Metho<strong>de</strong>n suspend bzw. resume ist es<br />

möglich e<strong>in</strong>en Thread vorübergehend zu unterbrechen bzw. fortzusetzen. Durch<br />

suspend() wird die Ausführung unterbrochen, durch resume() wird <strong>de</strong>r Thread<br />

(genauer: die Metho<strong>de</strong> run) an <strong>de</strong>r Stelle fortgesetzt, an <strong>de</strong>r die Unterbrechung<br />

erfolgte. Sowohl suspend() als auch resume() s<strong>in</strong>d aber <strong>de</strong>precated und sollten<br />

nicht mehr verwen<strong>de</strong>t wer<strong>de</strong>n.<br />

Verwaltung von Threads<br />

Threads besitzen adm<strong>in</strong>istrative Eigenschaften, die sich <strong>in</strong> zwei Gruppen e<strong>in</strong>teilen<br />

lassen:<br />

- Priorität und Name<br />

- Thread-Gruppen<br />

Priorität, Name. Je<strong>de</strong>r Thread hat e<strong>in</strong>en e<strong>in</strong><strong>de</strong>utigen Namen. Ohne explizite Vorgabe<br />

erfolgt die Vergabe <strong>de</strong>s Namens automatisch <strong>in</strong> <strong>de</strong>r Form “Thread-“+n , wobei n<br />

e<strong>in</strong> <strong>in</strong>t ist. Mit public void setName(Str<strong>in</strong>g name) kann e<strong>in</strong>em Thread e<strong>in</strong><br />

Name zugewiesen wer<strong>de</strong>n. Mit public Str<strong>in</strong>g getName() kann <strong>de</strong>r Name e<strong>in</strong>es<br />

Thread abgefragt wer<strong>de</strong>n. public static Thread currentThread() liefert<br />

<strong>de</strong>n Zugriff auf <strong>de</strong>n aktuellen Thread, <strong>de</strong>r die Metho<strong>de</strong> gera<strong>de</strong> ausführt, z.B.:<br />

public class ThreadTest<br />

{<br />

public static void ma<strong>in</strong>(Str<strong>in</strong>g args[])<br />

{<br />

System.out.pr<strong>in</strong>tln("THREAD: " + Thread.currentThread() );<br />

}<br />

}<br />

/* Ausgabe am Bildschirm: THREAD: Thread[ma<strong>in</strong>,5,ma<strong>in</strong>]<br />

Die Ausgabe umfasst : Name, Priorität und Gruppe<br />

*/<br />

Neben <strong>de</strong>m Namen besitzt e<strong>in</strong> Thread noch e<strong>in</strong>e Priorität. Die Priorität steuert <strong>de</strong>r<br />

Scheduler <strong>in</strong> <strong>de</strong>r Weise, daß bei Vorhan<strong>de</strong>nse<strong>in</strong> mehrerer Threads diejenigen mit<br />

höherer Priorität vor <strong>de</strong>nen mit niedrigerer Priorität ausgeführt wer<strong>de</strong>n. Beim Anlegen<br />

e<strong>in</strong>es neuen Thread bekommt dieser die Priorität <strong>de</strong>s aktuellen Thread. Mit public<br />

void setPriority(<strong>in</strong>t neuePrioritaet) kann die neue Priorität gesetzt und<br />

mit public <strong>in</strong>t getPriority() abgefragt wer<strong>de</strong>n. Als Parameter kann an<br />

setPriority() e<strong>in</strong> Wert übergeben wer<strong>de</strong>n, <strong>de</strong>r zwischen <strong>de</strong>n Konstanten<br />

Thread.MIN_PRIORITY und Thread.MAX_PRIORITY liegt. <strong>Java</strong> bietet 10<br />

100

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!