我即将学习java线程设施。
我有2个班级:
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");
}
}
和计时器类:
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();
}
}
当我调试代码时。我有以下输出:
I'm executed!
timer stopped
try block executed
一切似乎都是最终的,除了我输出上面的应用程序没有退出。 eclipse仍处于调试模式,并且没有抛出任何异常。
答案 0 :(得分:3)
在您不再需要Timer运行任务之后,您应该调用timer.cancel()
来释放其线程。
答案 1 :(得分:3)
使用thread.setDaemon(true)
告诉JVM使该线程成为守护程序线程。 守护程序线程不会阻止程序退出。