Java基础知识整理(七)- setDaemon()

有一道笔试题是这样的,估计大家都见过,他用了Thread的一个方法,setDaemon(),问你一些输出啊什么的。

daemon的中文是守护进程,后台程序的意思。


需要注意的一些知识点:

        1. 守护线程就是运行在系统后台的线程,如果JVM中只有守护线程,则JVM退出。

        2. Main主线程结束了(Non-daemon thread),如果此时正在运行的其他threads是daemon threads,JVM会使得这个threads停止,JVM也停下.

如果此时正在运行的其他threads有Non-daemon threads,那么必须等所有的Non daemon线程结束了,JVM才会停下来。

        3. 必须等所有的Non-daemon线程都运行结束了,只剩下daemon的时候,JVM才会停下来,注意Main主程序是Non-daemon线程.

        4. 典型的守护线程例子是JVM中的系统资源自动回收线程, 我们所熟悉的Java垃圾回收线程就是一个典型的守护线程。

        5. setDaemon需要在start方法调用之前使用。

        6. 线程划分为用户线程和后台(daemon)进程,setDaemon将线程设置为后台进程

        7. setDaemon方法把java的线程设置为守护线程,此方法的调用必须在线程启动之前执行。


题目:

package org.ygy.exam;

public class ThreadDemo {
	
	public static void main(String[] args) throws InterruptedException {
		
		Thread t = new Thread() {
			
			public void run() {
				try {
					Thread.currentThread().sleep(1000);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				
				System.out.println("thread:Hello World");
			}
		};
		
		t.setDaemon(true);//在start方法之前调用;默认是false;设为true,设置线程为守护线程,
		t.start();
		
		System.out.println("main:Hello World");
	}

}

问,上述代码执行完之后,输出是什么?

当时,已经忘了setDaemon是干嘛的,果断判断错了,

这里的守护线程,在run()方法里面睡了1秒,所以在main方法执行完之后,JVM中只有一个守护线程,于是JVM就退出了。

所以输出为:




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值