Java守护线程

Java中有两类线程:User Thread(用户线程)、Daemon Thread(守护线程)

  1. 只要当前JVM实例中尚存在任何一个非守护线程没有结束,守护线程就全部工作;只有当最后一个非守护线程结束时,守护线程随着JVM一起结束工作

  2. Daemon的作用是为其他线程的运行提供便利服务,守护线程最典型的应用就是GC

  3. UserDaemon两者几乎没有区别,如果User Thread全部退出运行,只剩下Daemon Thread,那虚拟机也会退出(没有了被守护者User ThreadDaemon Thread无事可做,没有继续存在的必要)

  4. 除虚拟机提供,开发者也可以设置线程为守护线程

    Thread daemonTread = new Thread();
    // 设定 daemonThread 为 守护线程,default false(非守护线程)
    daemonThread.setDaemon(true);
    // 验证当前线程是否为守护线程,返回 true 则为守护线程
    daemonThread.isDaemon();
    
    1. thread.setDaemonThread(true)必须在start()之前设置
    2. Daemon线程中产生的线程也是Daemon
    3. 不要认为所有的应用都可以分配给Daemon来进行服务比如读写操作或计算逻辑
  5. JRE判断程序是否执行结束的标准是所有的前台执行线程执行完毕,而不管后台线程(守护线程)的状态

补充说明:

  1. 守护线程也称服务线程,没有用户线程执行时,守护线程自动停止
  2. 优先级较低,用于为系统中的其他对象和线程提供服务
  3. 通过setDaemon将用户线程设置为守护线程
  4. 垃圾回收线程就是一个经典的守护线程
  5. JVM中不存在用户线程时,垃圾回收线程也会自动停止
  6. 守护线程依赖于终端,依赖于系统。
  7. Java中当JVM中的所有线程都是守护线程时,JVM就可以退出了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值