守护线程java thread setDaemon

本文详细介绍了Java中守护线程的概念及其工作原理。守护线程主要用于为系统中的其他对象和线程提供服务,并且具有最低的优先级。当程序中没有非守护线程在运行时,Java虚拟机会自动关闭。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

thread = new Thread(this);
thread.setDaemon(true);
thread.start();
当java虚拟机中没有非守护线程在运行的时候,java虚拟机会关闭。当所有常规线程运行完毕以后,守护线程不管运行到哪里,虚拟机都会退出运行。所以你的守护线程最好不要写一些会影响程序的业务逻辑。否则无法预料程序到底 会出现什么问题。


import java.io.IOException;
/* 
* 守护线程在没有用户线程可服务时自动离开
* 在Java中比较特殊的线程是被称为守护(Daemon)线程的低级别线程。
* 这个线程具有最低的优先级,用于为系统中的其它对象和线程提供服务。
* 将一个用户线程设置为守护线程的方式是在线程对象创建之前调用线程对象的setDaemon方法。
* 典型的守护线程例子是JVM中的系统资源自动回收线程,
* 我们所熟悉的Java垃圾回收线程就是一个典型的守护线程,
* 当我们的程序中不再有任何运行中的Thread,
* 程序就不会再产生垃圾,垃圾回收器也就无事可做,
* 所以当垃圾回收线程是Java虚拟机上仅剩的线程时,Java虚拟机会自动离开。 
* 它始终在低级别的状态中运行,用于实时监控和管理系统中的可回收资源。
* 守护进程(Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。
* 也就是说守护线程不依赖于终端,但是依赖于系统,与系统“同生共死”。
* 那Java的守护线程是什么样子的呢。
* 当JVM中所有的线程都是守护线程的时候,JVM就可以退出了;
* 如果还有一个或以上的非守护线程则JVM不会退出。 
*/
  1. public class testThread extends Thread {

  2. public testThread() {
  3. }
  4. /** *//**
  5. * 线程的run方法,它将和其他线程同时运行
  6. */
  7.     public void run(){
  8. for(int i = 1; i <= 100; i++){
  9. try{
  10. Thread.sleep(100);

  11. } catch (InterruptedException ex){
  12. ex.printStackTrace();
  13. }
  14. System.out.println(i);
  15. }
  16. }
  17. public static void main(String [] args){
  18. testThread test = new testThread();
  19. test.setDaemon(true);
  20. test.start();
  21. System.out.println("isDaemon = " + test.isDaemon());
  22. try {
  23. System.in.read(); // 接受输入,使程序在此停顿,一旦接收到用户输入,main线程结束,守护线程自动结束
  24. } catch (IOException ex) {
  25. ex.printStackTrace();
  26. }
  27. }
  28. }
复制代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值