如题

解决方案 »

  1.   

    可以的。。如果你的main线程调用了另一个线程(例如:Thread-0),线程Thread-0不断执行处理,而且事件很长,你的main线程调用完start就结束了。那就剩下Thread-0了啊。
      

  2.   

    我觉得没有问题,你用eclipse debug一下,你发现main程序已经结束了,java会开启DestroyJavaVm线程。
      

  3.   

    不知道LZ所谓的主线程退出,是指什么。如果是只结束main方法,那是可以的,就像3L说的class MainClass {
        public static void main(String[] args) {
            Thread tread = new Thread() {
                public void run() {
                    try {
                        while (true) {
                            System.out.println("thread alive.");
                            sleep(1000);
                        }
                    } catch (Throwable e) {
                        e.printStackTrace();
                    }
                }
            };
            thread.start();
            System.out.println("main end");
            return; //如果是指System.eixt(0);,那就没办法了
        }
    }
      

  4.   

    6楼说的貌似有理,今天我也是才想到这个问题.
    首先主线程在java里有没有这个概念也是个问题,system.exit是不是等于主线程退出呢?
      

  5.   

    缺省的,虚拟机等待所有的线程结束程序才结束。
    守护线程例外,会随程序主动结束。
    LZ可以用g搜一下“守护线程”
      

  6.   

    我认为LZ说的方式可以实现。也就是6楼的代码。
    Java的Main所在的线程启动一个新的线程以后,两个线程的优先级应该一样。
    如果调用System.exit()的话,不是结束Main线程,而是结束了整个Java进程。
    也就是说,你在run一个Java application的时候,这个时候系统会开一个进程
    然后这个进程启动了Main线程。
    Java进程确定虚拟机中没有线程运行的时候,退出进程。
    或者也可以用System.exit(0);强制退出进程。注意:Main线程和Main中启动的线程都是依赖于Java虚拟机进程的。
      

  7.   

    setdeamon()设置为非后台线程。