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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

问题:main函数中主线程和其它线程
毕老师举的线程示例中,mian方法中包含主线程和垃圾回收线程,代码如下:
  1. class Demo extends Object
  2. {
  3.                 public void finalize()
  4.                 {
  5.                                      System.out.println(“demo ok”);
  6.          }
  7. }
  8. class ThresdDemo
  9. {
  10.                  public static void main(String[] args)
  11.                  {
  12.                                       new Demo();//创建Demo进程
  13.                                       new Demo();//创建Demo进程
  14.                                       System.gc();//垃圾回收
  15.                                       new demo();//创建Demo进程
  16.                                       System.out.println(“hello world”);
  17.          }
  18. }
复制代码

由于是多线程程序,两次运行结果如下:
老师的解释是:第二种现象是因为JVM已经结束了,所以没来得及进行第二个Demo对象回收。

后面我发现老师又举的一个示例:
  1. class Demo extends Thread
  2. {
  3.                 public void run()
  4.         {
  5.                                    for(int x=0; x<60; x++)
  6.                                          System.out.println(“demo run---”+x);
  7.          }
  8. }
  9. class ThreadDemo
  10. {
  11.          public static void main(String[] args)
  12.          {
  13.                    Demo d = new Demo();//创建线程对象
  14.                           d.start();//启动线程
  15.                                      for(int x=0; x<60; x++)
  16.                                              System.out.println(“Hello World!--”+x);
  17.           }
  18. }
复制代码
运行打印结果:

可以看到控制台中已经打印Hello World!--59,意味着主线程已经结束。但是Demo线程还在执行,这跟前面的示例不一样吗?这里不能理解为Demo线程就是上个示例中的垃圾回收线程吗?为什么Demo线程还在执行?如果说JVM结束所有的进程都得结束,那么我想问JVM结束的标志是不是主线程的结束?我在这边绕了,想求大牛请教一下,感激不尽!

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马