执行所有代码后应用程序未终止

时间:2011-05-17 03:45:29

标签: java multithreading wait

我即将学习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仍处于调试模式,并且没有抛出任何异常。

2 个答案:

答案 0 :(得分:3)

在您不再需要Timer运行任务之后,您应该调用timer.cancel()来释放其线程。

答案 1 :(得分:3)

使用thread.setDaemon(true)告诉JVM使该线程成为守护程序线程。 守护程序线程不会阻止程序退出。