JUC学习-14-守护线程(垃圾回收器)

JUC学习-14-守护线程(垃圾回收器)

将此线程标记为守护线程或者用户线程

setDaemon(boolean on) 

默认情况下我们创建的宪曾都是用户线程(普通线程),进程需要等待所有的线程执行完毕后,进程才会结束。

守护线程 setDaemon(true) 设置守护线程

想要查看线程到底是用户线程还是守护线程,可以通过Thread.isDaemon()方法来判断,如果返回的结果是true,则为守护线程,反之则为用户线程。

当所有的用户线程退出后,守护线程会立马结束

应用:

  • 垃圾回收期线程属于守护线程

  • tomcat用来接受处理外部的请求的线程就是守护线程。

代码:

class TestDaemon {
	public static void main(String[] args) {
		Thread t = new Thread (() -> {
			try {
				Thread.sleep(500);
			} catch (InterruptedException e) {
				throw new RuntimeException(e);
			}
			System.out.println("子线程结束");
		});
		t.start();
		System.out.println("主线程结束");
	}
}

结果如下:

因为子线线程执行了sleep()操作,所以在主线程执行完毕以后,子线程才执行完并打印相关信息。

image

将子线程设置为守护线程

class TestDaemon {
	public static void main(String[] args) {
		Thread t = new Thread (() -> {
			try {
				Thread.sleep(500);
			} catch (InterruptedException e) {
				throw new RuntimeException(e);
			}
			System.out.println("子线程结束");
		});
		// 设置子线程为守护线程
		t.setDaemon(true);
		t.start();
		System.out.println("主线程结束");
	}
}

结果如下:

因为子线程被设置成了"守护线程",所以在主线程执行完毕以后守护线程立即结束了,没有打印相关信息

image

posted @ 2025-07-10 10:34  skystrivegao  阅读(5)  评论(0)    收藏  举报