程序员求职经验分享与学习资料整理平台

网站首页 > 文章精选 正文

java的守护线程的作用

balukai 2025-03-05 13:21:14 文章精选 5 ℃

守护线程其实就是非守护线程的保姆,只有非守护线程存在时,守护线程才能存在,一旦非守护线程结束,则守护线程无条件地退出。

下面通过一个例子来说明守护线程的运行机制


/**
 * 守护线程测试
 * @author ssj
 *
 */
public class SouhuTest {
	public static void main(String[] arg0) {
		System.out.println("===============main start=============");
		Thread watchThread= new Thread("守护线程...") {
			@Override
			public void run() {
				int j = 0;
				while (j<1000) {
					j++;
					try {
						Thread.sleep(1000);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					System.out.println(Thread.currentThread().getName() + ":" + j);
				}
				super.run();
			}
		};
		Thread userThread = new Thread("非守护线程") {
			@Override
			public void run() {
				int j = 0;
				while (j <= 3 j try thread.sleep1000 catch interruptedexception e e.printstacktrace system.out.printlnthread.currentthread.getname j super.run setdaemon false watchthread.setdaemontrue watchthread userthread.setdaemonfalse userthread watchthread.start userthread.start system.out.println='==========main' end='==============");' codeprep data-track='52'>运行结果



如果我注释非守护线程的运行代码://userThread.start();

运行结果会如何呢?

答案是守护线程不打印



通过上面的测试,我们得出结论:

守护线程是jvm中一切非守护线程的保姆,它的存亡无关紧要

那么守护线程的作用是什么呢?

1 jvm的垃圾回收器使用的就是守护线程,当某个线程运行产生的垃圾过多时,守护线程会实时监视并回收垃圾;当线程结束时,垃圾其实也相应地释放了,也就用不上守护线程了,守护线程也就退出了

2 守护线程用来服务于指定的线程,如数据连接池的关闭等,做一个辅助和保障功能;

Tags:

最近发表
标签列表