/ / Aplikacja nie została zakończona po wykonaniu całego kodu - java, wielowątkowość, czekaj

Aplikacja nie została zakończona po wykonaniu całego kodu - java, wielowątkowość, czekaj

Mam zamiar nauczyć się obsługi wątków java.

Mam 2 klasy:

public class Main {
public static void main(String[] arg) throws Exception {

Timer timer = new Timer();
timer.schedule(new ExecuteTimer(Thread.currentThread()), 2000);

try {
Thread.currentThread().join();
} catch (InterruptedException ex) {
System.out.println("timer stopped");
}
System.out.println("try block executed");
}
}

i klasa zegara:

public class ExecuteTimer extends TimerTask {
public ExecuteTimer(Thread thread) {
creatingThread = thread;
}
private Thread creatingThread;

@Override
public void run() {
System.out.println("I"m executed!");
creatingThread.interrupt();

}

}

Kiedy debuguję kod. Mam następujące wyniki:

I"m executed!
timer stopped
try block executed

Wydaje się, że wszystko jest ostateczne, z wyjątkiem tego, że aplikacja nie zakończyła działania po tym, jak mam wyjście powyżej. Zaćmienie pozostaje w trybie debugowania i nie został zgłoszony żaden wyjątek.

Odpowiedzi:

3 dla odpowiedzi № 1

Gdy nie potrzebujesz już Timera do uruchamiania zadań, powinieneś zadzwonić timer.cancel() zwolnić jego wątek.


3 dla odpowiedzi № 2

Posługiwać się thread.setDaemon(true) aby powiedzieć maszynie JVM, aby wątek był wątkiem demona. Nić Daemona nie zapobiega uruchomieniu programu.