Java基础知识整理(七)- setDaemon()
来源:互联网 发布:产业大数据平台 编辑:程序博客网 时间:2024/06/05 12:42
有一道笔试题是这样的,估计大家都见过,他用了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就退出了。
所以输出为:
- Java基础知识整理(七)- setDaemon()
- JAVA基础知识整理(七) ---数据库
- Java基础知识(七)
- Java基础知识(七)
- java基础知识(七)
- java基础知识(整理)
- java基础知识总结(七)
- Java基础知识整理(一)
- Java基础知识整理(二)
- Java基础知识整理(三)
- Java基础知识整理(四)
- java基础知识整理(2)
- java基础知识整理(3)
- Java基础知识整理(一)
- java基础知识整理(二)
- JAVA基础知识整理(一)
- JAVA基础知识整理(二)
- JAVA基础知识整理(三)
- Finding Software
- 单例模式 Singleton
- suid&&sgid
- [安卓开发]C4Droid:在手机上直接编程,然后导出为apk
- LTE 网络基础总结
- Java基础知识整理(七)- setDaemon()
- Linux信号、对应的值以及解释
- 使用MATLAB学习模电-002
- LINUX CAT(concatenate)结合多个文件并输出到标准输出设备
- LINUX cd切换目录
- XML CDATA
- Xen下运行arinc653调度算法
- 二叉树中和为某一值的路径
- C++ void参数