/*
 *
 *  Copyright 2018 FJN Corp.
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 *
 *  Author                        Date                       Issue
 *  fs1194361820@163.com          2015-01-01                 Initial Version
 *
 */

package com.fjn.jdk.thread_concurrent.thread.exit;

/**
 * 结论：main 线程退出时，JVM不会推出，直到没有user线程执行时JVM才会退出。
 * 可以修改daemon Thread的时间来测试
 * @author fs1194361820@163.com 2015年7月27日
 *
 */
public class JvmExitTest {
    public static void main(String[] args) {
        JvmExitTest test= new JvmExitTest();
        test.aUserThread();
        test.aDaemonThread();
        System.out.println("out main thread .");
    }

    public void aUserThread(){
        new Thread(new Runnable(){
            @Override
            public void run() {
                try {
                    Thread.sleep(5000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("out user thread .");
            }
        }).start();
    }

    public void aDaemonThread(){
        Thread t=new Thread(new Runnable(){
            @Override
            public void run() {
                try {
                    Thread.sleep(8000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("out daemon thread .");
            }
        });
        t.setDaemon(true);
        t.start();
    }
}
