Created
March 15, 2015 08:56
-
-
Save heckenmann/ebe00b36ab49344d7e13 to your computer and use it in GitHub Desktop.
Neue Threads in Java starten
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package de.heckenmann.threadbeispiel; | |
public class ThreadBeispiel implements Runnable { | |
public static void main(final String... args) throws InterruptedException { | |
// Neue Threads definieren. Es wird ein Runnable-Objekt übergeben. | |
final Thread t1 = new Thread(new ThreadBeispiel()); | |
final Thread t2 = new Thread(new ThreadBeispiel()); | |
// Threads starten | |
t1.start(); | |
t2.start(); | |
// Laufen die Threads? | |
checkThread(t1); | |
checkThread(t2); | |
// Gleiche Aktion ausführen wie die Threads, um Nebenläufigkeit zum main-Thread zu zeigen. | |
for (int i = 0; i < 5; i++) { | |
warteUndSchreibe(); | |
} | |
// Threads stoppen (ist nur nötig, weil in ihnen eine Endlosschleife läuft) | |
t1.interrupt(); | |
t2.interrupt(); | |
// Meistens sind die Threads an dieser Stelle noch aktiv. | |
checkThread(t1); | |
checkThread(t2); | |
// interrupt() blockiert nicht. Deshalb muss man auf die Threads warten, bevor man prüft, ob sie noch laufen. | |
t1.join(); | |
t2.join(); | |
// Laufen die Threads? | |
checkThread(t1); | |
checkThread(t2); | |
} | |
/** | |
* Status des übergebenen Threads ausgeben. | |
*/ | |
private static void checkThread(final Thread t) { | |
if (t.isAlive()) { | |
System.out.println(t.getName() + " läuft."); | |
} else { | |
System.out.println(t.getName() + " läuft NICHT."); | |
} | |
} | |
/** | |
* Wartet 1000 ms und gibt danach den Namen des Threads aus. | |
*/ | |
private static void warteUndSchreibe() throws InterruptedException { | |
Thread.sleep(1000); | |
System.out.println(Thread.currentThread().getName()); | |
} | |
/** | |
* Dieser Teil wird in einem anderen Thread ausgeführt. | |
*/ | |
@Override | |
public void run() { | |
try { | |
while (true) { | |
warteUndSchreibe(); | |
} | |
} catch (final InterruptedException e) { | |
System.err.println(Thread.currentThread().getName() + " gekillt."); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment