多线程中,
main线程结束后,main中创建的其它的线程还继续运行吗?

解决方案 »

  1.   

    main方法结束后,程序就退出了。
      

  2.   

    楼上这两位所说的结论自己测试过么?如果所创建子线程是Daemon线程(setDaemon(true)),那么主线程结束,程序就会终止。否则,就要等所有线程结束,程序才会终止。
      

  3.   

    public class TheadDemo extends Thread{
    @Override
    public void run() {
    System.out.println(Thread.currentThread().getName()+"StEXE");
    for (int i = 0; i < 10; i++) {
    try {
    Thread.sleep(1000);
    System.out.println(Thread.currentThread().getName()+" "+i);
    } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    System.out.println(Thread.currentThread().getName()+"ENDED");
    }
    public static void main(String[] args) {
    System.out.println(Thread.currentThread().getName()+"ExeD");
    TheadDemo t1 = new TheadDemo();
    TheadDemo t2 = new TheadDemo();
    t1.start();
    t2.start();
    System.out.println(Thread.currentThread().getName()+"ENDEd");
    }
    }
    /////////////////////////out//////////////////////
    mainExeD
    mainENDEd
    Thread-1StEXE
    Thread-0StEXE
    Thread-0 0
    Thread-1 0
    Thread-0 1
    Thread-1 1
    Thread-1 2
    Thread-0 2
    Thread-0 3
    Thread-1 3
    Thread-1 4
    Thread-0 4
    Thread-1 5
    Thread-0 5
    Thread-1 6
    Thread-0 6
    Thread-1 7
    Thread-0 7
    Thread-0 8
    Thread-1 8
    Thread-0 9
    Thread-1 9
    Thread-1ENDED
    Thread-0ENDED从它的运行结果看,main先执行结束,但其它还再执行??
      

  4.   


    如我5楼所说。楼主可以再增加两句话试试:
    TheadDemo t1 = new TheadDemo();
    TheadDemo t2 = new TheadDemo();
    t1.setDaemon(true); // 增加
    t2.setDaemon(true); // 增加
    t1.start();
    t2.start();
      

  5.   

    除非设置为后台线程setDaemon(true),否则继续运行
      

  6.   

    默认情况下,你main没有调用System.exit(),其他线程还是会执行的
      

  7.   

    main方法也只是个方法,虚拟机的生命周期起始于main方法,结束于所有非守护线程退出
      

  8.   

    理解一下:
    * 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. 
    在JVM没有exits之前,起动的线程都会执行到run方法完成而死亡。
    而JVM的exits,是在最后一个非daemon线程执行完成之时。
    感谢各位的解答,分不够用,实在抱歉,Thanks
      

  9.   

    没有结束,只要子线程不是daemon线程,子线程与其他主线程没区别,也相互没有关系。public class ThreadMainDemo implements Runnable{
    private Thread mainThread;
    public ThreadMainDemo(Thread main){
    mainThread = main;
    }
    public void run(){
    while(true){
    System.out.println("主线程是否存活" + mainThread.isAlive());
    }

    }
    public static void main(String[] args){
    System.out.println("main线程开始");
    System.out.println("子线程开始");
    new Thread(new ThreadMainDemo(Thread.currentThread())).start();
    try{
    Thread.sleep(100);
    }catch(Exception e){
    }
    System.out.println("main线程结束");

    }
    }