- JVM会在所有的非守护线程(用户线程)执行完毕后退出;
- main线程是用户线程;
- 仅有main线程一个用户线程执行完毕,不能决定JVM是否退出,也即是说main线程并不一定是最后一个退出的线程。
public class MainThreadTest { public static void main(String[] args) { new Timer().schedule(new TimerTask(){ @Override public void run() { System.out.println("Timer thread is running..."); } }, 500, 500); System.out.println("Main thread ends!"); } }
如何使main最后退出呢:(join方法)
- 在一个线程中启动另外一个线程的join方法,当前线程将会挂起,而执行被启动的线程,知道被启动的线程执行完毕后,当前线程才开始执行。
- 带参数的join,表示 超过参数时间后 ,主线程继续执行。之后,主线程和子线程交互执行。