1、java  线程分两种

1)守护线程(Daemon)

2)用户线程(User)

2、线程设置

任何线程都可设置为守护线程和用户线程。

方法: Thread.setDaemon(boolean);true 则把该线程 设置为守护线程,false 则为用户线程。

说明:Thread.setDaemon(boolean) 须在 Thread.start()之前调用,否则运行时会抛出异常。

3、两者的区别

唯一区别:判断虚拟机(JVM)何时离开,Daemon  Thread 是为其他线程提供服务的,若全部的 User Thread 已经撤离,Daemon 没有可服务的线程,JVM 撤离。

换一种理解方式:守护线程是 JVM 自动创建的线程(但不一定),用户线程是程序创建的线程;比如 JVM 的 垃圾回收线程是一个守护线程,当所有线程已经撤离, 不再产生垃圾,守护线程自然就无事可干了,当垃圾回收线程是 Java 虚拟机上仅剩的线程时,Java 虚拟机会自动离开。

扩展:

Thread Dump (jstack命令)打印出来的线程信息,含有 daemon 字样的线程即为守护进程,可能会有:服务守护进程、编译守护进程、windows 下的监听Ctrl+break 的守护进程、Finalizer 守护进程、 引用处理守护进程、GC 守护进程。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐