Hallo,
ich möchte zuerst einen Thread starten, auf dessen Beendigung warten oder mittels Timeout diesen abbrechen.
Main
Thread
Die main() soll zunächst 5 Sekunden auf den Thread warten, wenn dieser dann noch läuft, soll dieser beendet werden.
Ausgabe des Programms:
Wieso läuft der Thread nachdem Interrupt trotzdem weiter und wie kann ich den Thread beenden ?
ich möchte zuerst einen Thread starten, auf dessen Beendigung warten oder mittels Timeout diesen abbrechen.
Main
Java:
public class Main {
public static void main(String[] args) {
ThreadItem i=new ThreadItem();
Thread t=new Thread(i);
System.out.println("main: starte thread");
t.start();
try {
System.out.println("main: warte auf thread");
t.join(5000);
System.out.println("main: thread fertig oder Timeout");
if(t.isAlive()) {
System.out.println("interrupt thread");
t.interrupt();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Main: beende main()");
}
}
Thread
Java:
import java.util.concurrent.TimeUnit;
public class ThreadItem implements Runnable {
@Override
public void run() {
while(!Thread.interrupted()) {
System.out.println("Thread: bin da ..");
try {
TimeUnit.SECONDS.sleep(2);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
Die main() soll zunächst 5 Sekunden auf den Thread warten, wenn dieser dann noch läuft, soll dieser beendet werden.
Ausgabe des Programms:
Code:
main: starte thread
main: warte auf thread
Thread: bin da ..
Thread: bin da ..
Thread: bin da ..
main: thread fertig oder Timeout
interrupt thread
Main: beende main()
Thread: bin da ..
java.lang.InterruptedException: sleep interrupted
at java.lang.Thread.sleep(Native Method)
at java.lang.Thread.sleep(Unknown Source)
at java.util.concurrent.TimeUnit.sleep(Unknown Source)
at de.ThreadItem.run(ThreadItem.java:12)
at java.lang.Thread.run(Unknown Source)
Thread: bin da ..
Thread: bin da ..
Wieso läuft der Thread nachdem Interrupt trotzdem weiter und wie kann ich den Thread beenden ?