各位:以下是我写的HelloWorld代码,使用javac编译成功,使用java HelloWorld 执行后,查看进程情况如下:
请问我执行一次java HelloWorld 怎么会出现 这么多的子线程呢?? 问题紧急,多谢各位关注!![mhhb@web mhhb]$ ps -ef|grep Hello
mhhb     14687 14013 37 13:34 pts/6    00:00:02 java HelloWorld
mhhb     14688 14687  0 13:34 pts/6    00:00:00 java HelloWorld
mhhb     14689 14688  0 13:34 pts/6    00:00:00 java HelloWorld
mhhb     14690 14688  0 13:34 pts/6    00:00:00 java HelloWorld
mhhb     14691 14688  0 13:34 pts/6    00:00:00 java HelloWorld
mhhb     14692 14688  0 13:34 pts/6    00:00:00 java HelloWorld
mhhb     14693 14688  0 13:34 pts/6    00:00:00 java HelloWorld
mhhb     14694 14688  0 13:34 pts/6    00:00:00 java HelloWorld
mhhb     14695 14688  0 13:34 pts/6    00:00:00 java HelloWorld
mhhb     14697 14480  0 13:35 pts/4    00:00:00 grep Hello以下是HelloWorld代码:public class HelloWorld{
        public static void main(String[] args) 
        {
            while(true)
            {
                System.out.println("AAA");            }
        }
}

解决方案 »

  1.   

    子线程?不是子线程哟。
      while(true)
      {
      System.out.println("AAA");  }
    你这程序里面是个死循环啊,开起来就没停啊。上面是你测试的时候 java HelloWorld了9次的结果吧。
      

  2.   

    就像你机器挂了7-8个qq一样啊,因为你开了那么多次呗。
    你每开一个helloworld都没有关闭的哦,你先把他们kill完了再看
      

  3.   

    你想做什么呀
    要怎么多的AAA
      

  4.   

    程序是在linux下执行的,上面显示的“java HelloWorld"内容是通过ps命令查看进程情况的结果。
    含义就是这个程序总共启动了9个线程。 这一点也是我不能理解的,还望各位指教,谢谢!!!
      

  5.   

    我只执行了一次 java HelloWorld ,如果可以的话,您可以在自己机器上测试一下,看看结果。
      

  6.   


    这个只是一个测试程序,由于想通过ps 看到进程情况,所有写 了一个while死循环,可以将死循环修改为sleep一段时间,结果是一样的。执行一次java HelloWorld后,查看进程情况,将发现存在9个相关线程。
    这个事情让我久思不解啊,望指教,谢谢!!!
      

  7.   


    是的程序是一个死循环,我是通过kill PID 停止的,这只是为了达到测试效果,才这样写的。这个只是一个测试程序,由于想通过ps 看到进程情况,所有写 了一个while死循环,可以将死循环修改为sleep一段时间,结果是一样的。执行一次java HelloWorld后,查看进程情况,将发现存在9个相关线程。
    这个事情让我久思不解啊,望指教,谢谢!!!
      

  8.   

    [root@localhost ~]# ps -ef|grep HW
    root      8859  8768  0 16:34 pts/0    00:00:00 java HW
    root      8913  8882  0 16:35 pts/1    00:00:00 grep HW
    奇怪啊,同样的代码,只是class名字用的HW,我就只有1个呢
      

  9.   

    我这里就只有1个啊,常理
    你kill完了之后ps看看确认一个都没有么?确认没有了再java1次就有9个?
    完全没道理啊!同样期待高人解释。
      

  10.   

    是的,我确定执行前没有其他的java程序。
      

  11.   

    执行前检查,结果如下:
    [mhhb@web client]$ ps -ef|grep HelloWorld
    mhhb     14841 14013  0 16:27 pts/6    00:00:00 grep HelloWorld执行后检查,结果如下:
    [mhhb@web mhhb]$ ps -ef|grep HelloWorld 
    mhhb     14842 14013 47 16:28 pts/6    00:00:00 java HelloWorld
    mhhb     14843 14842  0 16:28 pts/6    00:00:00 java HelloWorld
    mhhb     14844 14843  0 16:28 pts/6    00:00:00 java HelloWorld
    mhhb     14845 14843  0 16:28 pts/6    00:00:00 java HelloWorld
    mhhb     14846 14843  0 16:28 pts/6    00:00:00 java HelloWorld
    mhhb     14847 14843  0 16:28 pts/6    00:00:00 java HelloWorld
    mhhb     14848 14843  2 16:28 pts/6    00:00:00 java HelloWorld
    mhhb     14849 14843  0 16:28 pts/6    00:00:00 java HelloWorld
    mhhb     14850 14843  0 16:28 pts/6    00:00:00 java HelloWorld
    mhhb     14852 14480  0 16:28 pts/4    00:00:00 grep HelloWorld
    [mhhb@web mhhb]$ kill 14842
    [mhhb@web mhhb]$ ps -ef|grep HelloWorld
    mhhb     14855 14480  0 16:29 pts/4    00:00:00 grep HelloWorld
    [mhhb@web mhhb]$ 
      

  12.   

    Java虚拟机在背后还给你做许多事,如垃圾收集,这些都是使用Daemon线程,还有程序的主线程等,如果要清楚的理解这些,可以去看看JVM方面的文章。
      

  13.   

    ps -ef 查看的是进程,不是线程数量。看线程数是 ps -Lf <pid>你那个 HelloWorld 好像启了 9 个进程在运行啊?
      

  14.   

    你的 ps 结果很奇怪啊,有 7 个 PPID 是属于同一个 HelloWorld PID 的。你的 HelloWorld 是怎么写的?怎么运行的?