欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java线程之守护线程和用户线程

程序员文章站 2022-05-17 14:48:59
/** *

Title: Demo3.java

*

Description:

*

Copyright: Copyright (c) 2017

*

Company: www.baidudu.com

* @author shenlan * @da ......

/**
* <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();
}
}

}

}