守护线程(后台线程)与非守护线程(用户线程,前台线程)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了守护线程(后台线程)与非守护线程(用户线程,前台线程)相关的知识,希望对你有一定的参考价值。

 当前台线程结束后,jvm将直接杀死后台线程,并且后台线程不会去执行finally代码块中的内容

public class DemoThread implements Runnable {

	@Override
	public void run() {
		// TODO Auto-generated method stub
		try {
			Thread.currentThread().sleep(1000);
			System.out.println("我是非守护线程");
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		};
		
	}

}

  

public class Main {
	public static void main(String[] args) {
		threadStart();
	}
	
	public static void threadStart(){
		DemoThread dt = new DemoThread();
		Thread thread = new Thread(dt);
		thread.setDaemon(true);
		
		thread.start();
	}

}

  1、当直接启动时,不会打印出内容

  2、当去掉thread.setDaemon(true)时,会打印出“我是非守护线程”

  原因分析:当thread设置为守护线程时,主线程是前台线程,执行完之后就直接结束,jvm直接kill啦thread这个守护线程,这个守护线程中的内容就不会继续执行下去;当去掉那一行时,thread就默认时前台线程,jvm会等所有前台线程执行完之后才会结束,thread线程即打印出啦内容

 

以上是关于守护线程(后台线程)与非守护线程(用户线程,前台线程)的主要内容,如果未能解决你的问题,请参考以下文章

Java的守护线程与非守护线程

守护进程与非守护进程

并发编程之多线程基础-守护线程与非守护线程

JAVA-初步认识-第十四章-多线程(守护线setDaemon)

java-守护线程

从头认识java-18.2 主要的线程机制-守护线程与非守护线程