A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 你懂得 中级黑马   /  2013-8-21 21:57  /  1148 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

请问守护线程究竟有什么作用?求大神相助

评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1

查看全部评分

2 个回复

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

  1. <P>import java.io.IOException;

  2. public class Test extends Thread {
  3. public Test() {

  4. }

  5. public void run() {
  6. for (int i = 0 ; i < 100 ; i ++) {
  7. try {
  8. Thread.sleep(100) ;
  9. } catch (InterruptedException e) {
  10. // TODO Auto-generated catch block
  11. e.printStackTrace();
  12. }
  13. System.out.println(i);
  14. }
  15. }

  16. public static void main (String args[]) {
  17. Test test = new Test() ;
  18. test.setDaemon(true) ;
  19. test.start() ;
  20. System.out.println("isDaemon=" + test.isDaemon());
  21. }
复制代码
   这个程序执行之后什么也不执行;什么也不打印;如果我们把 thread.setDaemon(true);删除,那么就可以打印出数字了。这就是守护线程,守护着最后一个用户线程,如果没有用户线程了,他也没作用了。

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马