日期:2014-05-20  浏览次数:20698 次

请求高手:在主线程启动子线程后,子线程还在运行,而主线程后已经没有语句可以执行,这时为什么主线程不退出?
在主线程启动子线程后,子线程还在运行,而主线程后已经没有语句可以执行,这时为什么主线程不退出?
public class ProducerConumer {
    public static void man(Strings[] args) {
        ProductList ps = new ProductList();
        Producer px = new Producer(ps, "X");
        Consumer ch = new Consumer(ps, "Y");
       //以下两个线程会循环执行一些任务,启动后不会马上停止
        new Thread(px).start();
        new Thread(ch).start();
       //疑问就是为何现在主线程启动子线程后没有了代码可执行,而子线程仞在执行,
       //按照java高手真经上,此时为何主线程不退出?它在等待着什么?或者主线程退出的条件又有哪些呢?
       //还望各位大大高手们赐教,多谢了。  
   }
}
thread java多线程问题 java主线程退出问题

------解决方案--------------------
引用
setDaemon

public final void setDaemon(boolean on)
Marks this thread as either a daemon thread or a user thread. The Java Virtual Machine exits when the only threads running are all daemon threads.
This method must be called before the thread is started.


setDaemon
------解决方案--------------------
执行完第八行时,主线程运行完了,只有子线程还在运行。
lz凭什么讲主线程还在运行?
------解决方案--------------------
主线程已经over了,只是子线程还在run。

------解决方案--------------------
主线程已经执行完了 。
只是子线程在执行。
如果你需要在主线程执行完之后  子线程也退出。
可以讲子线程设置为守护线程  用setDaemon(true) 方法。   注意该方法必须要在线程运行之前调用