java守护线程

守护线程:

线程分为用户线程和守护线程,当用户线程执行完毕后,程序就会结束,JRE判断程序是否执行结束的标准是所有的前台执线程行完毕了,而不管后台线程的状态 ,后台线程就是用来服务其他线程的线程,thread.setDaemon(true)必须在thread.start()之前设置;

执行情况

主线程(main)执行结束后,用户线程可以继续执行直至执行完毕;用户线程执行完毕后,守护线程立刻结束;

总结

  • 守护线程,它的生死无关重要,却依赖整个进程而运行;哪天其他线程结束了,整个程序就结束了,理都没理守护线程,就把它中断了;
  • 如果守护线程自己识时务,自己早点执行完毕,那就自己早点结束;整个程序也不必因此而挽留它;
  • 注意: 由于守护线程的终止是自身无法控制的,因此千万不要把IO、File等重要操作逻辑分配给它;因为它不靠谱。

那么守护线程的作用是什么?

  1. 举例, GC垃圾回收线程:就是一个经典的守护线程,当我们的程序中不再有任何运行的Thread,程序就不会再产生垃圾,垃圾回收器也就无事可做,所以当垃圾回收线程是JVM上仅剩的线程时,垃圾回收线程会自动离开。它始终在低级别的状态中运行,用于实时监控和管理系统中的可回收资源。
  2. 应用场景:(1)来为其它线程提供服务支持的情况;(2) 或者在任何情况下,程序结束时,这个线程必须正常且立刻关闭,就可以作为守护线程来使用;反之,如果一个正在执行某个操作的线程必须要正确地关闭掉否则就会出现不好的后果的话,那么这个线程就不能是守护线程,而是用户线程。通常都是些关键的事务,比方说,数据库录入或者更新,这些操作都是不能中断的。

转:https://blog.csdn.net/weixin_40087231/article/details/90031253

原文地址:https://www.cnblogs.com/brxHqs/p/13559625.html