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 № 1Gdy 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.