守护线程是什么_守护线程什么时候结束

守护线程是什么_守护线程什么时候结束守护线程是什么?Java线程分为用户线程和守护线程。守护线程是程序运行的时候在后台提供一种通用服务的线程。所有用户线程停止,进程会停掉所有守护线程,退出程序。Java中把线程设置为守护线程的方法:在start线程之前调用线程的setDaemon(true)方法。注意:setDaemon(true)必须在start()之前设置,否则会抛出IllegalThrea…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

守护线程是什么?

Java线程分为用户线程和守护线程。

守护线程是程序运行的时候在后台提供一种通用服务的线程。所有用户线程停止,进程会停掉所有守护线程,退出程序。

Java中把线程设置为守护线程的方法:在 start 线程之前调用线程的 setDaemon(true) 方法。

注意:

  • setDaemon(true) 必须在 start() 之前设置,否则会抛出IllegalThreadStateException异常,该线程仍默认为用户线程,继续执行
  • 守护线程创建的线程也是守护线程
  • 守护线程不应该访问、写入持久化资源,如文件、数据库,因为它会在任何时间被停止,导致资源未释放、数据写入中断等问题
public class TestDaemonThread {

	public static void main(String[] args) {
		testDaemonThread();
	}
	
	public static void testDaemonThread() {
		Thread t = new Thread() {

			@Override
			public void run() {
				//创建线程,校验守护线程内创建线程是否为守护线程
				Thread t2 = new Thread() {

					@Override
					public void run() {
						System.out.println("t2 : " + (Thread.currentThread().isDaemon() ? "daemon thread" : "non-daemon thread"));
					} 
					
				};
				t2.start();
				
				//当所有用户线程执行完,守护线程会被直接杀掉,程序停止运行
				int i = 1;
				while(true) {
					try {
						Thread.sleep(500);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					System.out.println("t : " + (Thread.currentThread().isDaemon() ? "daemon thread" : "non-daemon thread") + " , time : " + i);
					if (i++ >= 10) {
						break;
					}
				}
			}
			
		};
//		t.start(); //setDaemon(true) 必须在 start() 之前设置,否则会抛出IllegalThreadStateException异常,该线程仍默认为用户线程,继续执行
		t.setDaemon(true);
		t.start();
		
		try {
			Thread.sleep(1000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
}

执行结果:

t2 : daemon thread
t : daemon thread , time : 1
t : daemon thread , time : 2

结论:

  • 上述代码线程t,未打印到 t : daemon thread , time : 10,说明所有用户线程停止,进程会停掉所有守护线程,退出程序
  • 当 t.start(); 放到 t.setDaemon(true); 程序抛出IllegalThreadStateException,t 仍然是用户线程,打印如下
Exception in thread "main" t2 : non-daemon thread
java.lang.IllegalThreadStateException
	at java.lang.Thread.setDaemon(Thread.java:1359)
	at constxiong.interview.TestDaemonThread.testDaemonThread(TestDaemonThread.java:42)
	at constxiong.interview.TestDaemonThread.main(TestDaemonThread.java:6)
t : non-daemon thread , time : 1
t : non-daemon thread , time : 2
t : non-daemon thread , time : 3
t : non-daemon thread , time : 4
t : non-daemon thread , time : 5
t : non-daemon thread , time : 6
t : non-daemon thread , time : 7
t : non-daemon thread , time : 8
t : non-daemon thread , time : 9
t : non-daemon thread , time : 10

 


【Java面试题与答案】整理推荐

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/181562.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 面试题 垃圾分类_前端垃圾回收机制面试题

    面试题 垃圾分类_前端垃圾回收机制面试题一、垃圾回收对象JVM运行时的数据区包括程序计数器、栈、堆、方法区、本地方法栈其中程序计数器、栈和本地方法栈是和线程绑定在一起的,当创建了线程,就会申请内存,当线程结束的时候,想关的内存就会被销毁。方法区主要是类对象,类加载的时候就会申请这里的内存,“类卸载”操作实际上是很少会涉及到的。因此,垃圾回收机制主要回收的对象就是堆,并且垃圾回收释放内存,实际上是在以对象为单位进行释放,因为内存的申请是以对象为单位进行申请的,当整个对象的内存都不在使用时,即没有引用指向这个对象时,就可以将其进行释放二、垃圾

    2022年10月13日
    8
  • 为什么html在浏览器中不能显示图片_做html网页图片显示不出来

    为什么html在浏览器中不能显示图片_做html网页图片显示不出来我遇到的问题是写了一个HTML程序,结果在网页上面不能显示,原因是图片路径放置错了。修改前代码:效果图:ie网页上右键点击“属性”’查看图片路径发现地址错误,我存放图片的地址在C:\Users

    2022年8月2日
    20
  • 雅虎前端优化14准则

    雅虎前端优化14准则

    1.尽可能使用少的HTTP请求MakefewerHTTPrequests; 

      这个是很重要的一条,具体措施是使用Imagemaps 和InlineImages;合并CSS和脚本代码。比如对于ImageMaps 
    (服务器端)server-side 
    →http://…/navbar.cgi?127,1

    2022年7月15日
    17
  • python psutil 获取命令历史_python之psutil

    python psutil 获取命令历史_python之psutilpsutil=processandsystemutilities,psutil是个跨平台库,能够轻松实现获取系统运行的进程和系统利用率,包括CPU、内存、磁盘、网络等信息。Linux系统下的安装pipinstallpsutil现在开始看看它的使用一cpu#查看逻辑cpu的个数>>>psutil.cpu_count()2#查看物理cpu的个数>>&g…

    2022年6月1日
    33
  • leetcode-49字母异位词分组(map)[通俗易懂]

    leetcode-49字母异位词分组(map)[通俗易懂]原题链接给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。示例:输入: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]输出:[ [“ate”,”eat”,”tea”], [“nat”,”tan”], [“bat”]]说明:所有输入均为小写字母。不考虑答案输出的顺序。tclass Solution {public: vector<vector<string>> g

    2022年8月9日
    11
  • html+css网页开发 之 头部导航条(logo、导航栏、搜索框)

    html+css网页开发 之 头部导航条(logo、导航栏、搜索框)页面布局整体思路:确定页面的版心(可视区),测量可知。 分析页面中的行模块,以及每个行模块中的列模块。 一行中列模块常用浮动布局,先确定每个列的大小,之后确定列的位置。 制作HTML结构。遵循先有结构,后有样式的原则。头部制作1号是版心盒子header1200*42的盒子水平居中对齐 版心盒子内包含2号盒子logo 版心盒子内包含3号盒子nav导航栏 版心盒子内包含4号盒子search搜索框 版心盒子内包含5号盒子user个人信息 注意4个盒子都必须是浮动style.c..

    2022年5月28日
    50

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号