问题:main函数中主线程和其它线程 毕老师举的线程示例中,mian方法中包含主线程和垃圾回收线程,代码如下: - class Demo extends Object
- {
- public void finalize()
- {
- System.out.println(“demo ok”);
- }
- }
- class ThresdDemo
- {
- public static void main(String[] args)
- {
- new Demo();//创建Demo进程
- new Demo();//创建Demo进程
- System.gc();//垃圾回收
- new demo();//创建Demo进程
- System.out.println(“hello world”);
- }
- }
复制代码
由于是多线程程序,两次运行结果如下:
老师的解释是:第二种现象是因为JVM已经结束了,所以没来得及进行第二个Demo对象回收。
后面我发现老师又举的一个示例: - class Demo extends Thread
- {
- public void run()
- {
- for(int x=0; x<60; x++)
- System.out.println(“demo run---”+x);
- }
- }
- class ThreadDemo
- {
- public static void main(String[] args)
- {
- Demo d = new Demo();//创建线程对象
- d.start();//启动线程
- for(int x=0; x<60; x++)
- System.out.println(“Hello World!--”+x);
- }
- }
复制代码运行打印结果:
可以看到控制台中已经打印Hello World!--59,意味着主线程已经结束。但是Demo线程还在执行,这跟前面的示例不一样吗?这里不能理解为Demo线程就是上个示例中的垃圾回收线程吗?为什么Demo线程还在执行?如果说JVM结束所有的进程都得结束,那么我想问JVM结束的标志是不是主线程的结束?我在这边绕了,想求大牛请教一下,感激不尽! |