一般的,java中是把主线程先执行完毕了才会去执行你的子线程的run方法,优先级应该是主线程比子线程高。如果你要等子线程结束了再结束主线程,可以在start后调用join方法,会优先执行子程序。

解决方案 »

  1.   

    楼上的错,不是这么回事,只要主线程的时间片用完,那么就退出CPU,让其他运行,楼主的这个问题可以使用线程的join方法,如:
    Thread clientThread=new Thread(new ...);
    clientThread.start();
    client.join();
    ....
    System.exit(0);
    但是这个我觉得不好,太强制了,可以使用isAlive来判断子线程是否还存活,如
    public class Main {
    public static void main(String[] args)throws Exception {
    Thread thread=new Thread(new ClientThread());
    thread.start();
    while(thread.isAlive()){
    Thread.sleep(100);
    }
    System.out.println("main over");
    }
    }
    class ClientThread implements Runnable{
    public void run(){
    for(int i=0;i<10000;i++){

    }
    System.out.println("client over");
    }
    }
    假如有多个子线程,存在List中挨个判断,死掉的移出List,直到List中数据空为止
      

  2.   

    楼上的意思是不是说JAVA里主线程结束并不会强制它的子也结束,这个和VC里的微软多线程模式不一样?
      

  3.   

    一般主线程会先执行,如果在分配时间片内主线程还没执行完,那么这时候就要换子线程执行了,如果子线程在分配的时间片也不能执行完,那么就再次换主线程执行,一直这样轮替结束。
    如果使用的join()方法,则会主线程执行到join()换子线程进入执行,待子线程执行完毕,主线程才再次进入执行。