java daemon是什么,让我们一起了解一下。
daemon线程是为我们创建的用户线程提供服务的线程,比如说jvm的GC等等。这样的线程有一个非常明显的特征,当用户线程运行结束的时候,daemon线程将会自动退出。
daemon线程的特点是什么?
1、daemon线程创建的过程中需要先调用setDaemon方法进行设置,然后再启动线程,否则会报出IllegalThreadStateException异常。
2、由于daemon线程的终止条件是当前是否存在用户线程,所以我们不能指派daemon线程来进行一些业务操作,而只能服务用户线程。
3、daemon线程创建的子线程任然是daemon线程。
那么Daemon线程与非Daemon线程有什么区别?
基本上没有什么区别,不同之处就是当 java虚拟机中所有的非Daemon线程都停止运行之后,即使还存在有Daemon线程,java虚拟机也会退出。这是因为Daemon线程没有了被守护者,所以其也就没有继续运行的必要了。
Daemon线程可以通过调用Thread.setDaemon(true)设置,但是该方法的调用必须是在线程启动之前设置,否则将会抛出一个IllegalThreadStateException异常,这是因为一个正在运行中的线程是不能被设置成守护线程的。
Daemon线程被用作完成支持性的工作,但是在java虚拟机退出的时候Daemon线程中的finally代码块并不一定执行。
代码示例:
public class TestDaemonThread { public static void main(String[] args) { Thread thread = new Thread(new Runnable() { @Override public void run() { try { SleepUtils.second(1); }finally { System.out.println("DaemonThread finally run."); } System.out.println(); } }, "DaemonThread"); //在线程执行前设置为daemon线程 thread.setDaemon(true); thread.start(); } }
以上就是小编今天的分享了,希望可以帮助到大家。