标签:class date 主线程 其他 退出 trace 输出 nts import
/**
* <p>Title: Demo3.java</p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2017</p>
* <p>Company: www.baidudu.com</p>
* @author shenlan
* @date 2019年1月19日
* @version 1.0
*/
package test;
import java.util.concurrent.TimeUnit;
/**
* @Title: Demo3.java
* @Description:模拟:创建主线程(用户线程)中创建一个子线程为守护线程,执行main方法(用户线程)
* --断点测试..执行main方法,启动主线程(不结束main(用户线程))
* ==输出..执行一次主线程,由于main方法(用户线程)未结束,守护线程每秒输出一次(守护线程守护的是用户线程)
* --正常模式..
* ==输出..主线程执行一次,守护线程执行一次,只有由于用户线程结束,JVM退出,守护线程结束
* //将(子线程)守护线程改为用户线程时,主线程结束,主线程中的子线程一直运行(每秒执行一次)
*
* 注意 :不是说当前子线程是守护线程,主线程结束,子线程就跟着结束,前提条件是:当JVM应用实例中没有应用线程继续执行,如果有其他用户线程继续执行,那么后台线程不会中断.
* @Copyright: 投道科技 (c) 2018
* @Company: 投道科技
* @author 阿涛
* @date 2019年1月19日
* @version 1.0
*/
public class Demo3 {
public static void main(String[] args) {
Thread mainThread = new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
Thread childrenThread = new Thread(new ChildrenThread());
childrenThread.setDaemon(true);
// --守护线程必须在启动线程之前操作
childrenThread.start();
System.out.println("I‘m main thread.");
}
});
mainThread.start();
}
}
class ChildrenThread implements Runnable{
@Override
public void run() {
while (true) {
System.out.println("I‘m children thread.");
try {
TimeUnit.MILLISECONDS.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
标签:class date 主线程 其他 退出 trace 输出 nts import
原文地址:https://www.cnblogs.com/javaxingtao/p/10291769.html