本帖最后由 fanday 于 2010-06-09 17:36:02 编辑

解决方案 »

  1.   

    你的线程start()后你就控制不了它具体何时真正执行,即使是后生成的线程也可能比它前面生成的线程先运行,这个由CPU具体来控制,线程何时拿到CPU锁是随机的。如果你想要按顺序运行,建立一个容量为1的先进先出的线程池,服务端获取到的请求每次都生成一个Runnable对象,交给线程池去运行。
      

  2.   

                        System.out.println(t.getName() + ":" + t.isAlive());
    这里句前面加上
     while(!t.isAlive()){
    Thread.sleep(500);
    }看不懂楼主这么做有什么意义。。
      

  3.   

    你的线程start()后你就控制不了它具体何时真正执行,即使是后生成的线程也可能比它前面生成的线程先运行,这个由CPU具体来控制,线程何时拿到CPU锁是随机的。如果你想要按顺序运行,建立一个容量为1的先进先出的线程池,服务端获取到的请求每次都生成一个Runnable对象,交给线程池去运行。
    System.out.println(t.getName() + ":" + t.isAlive());
    这里句前面加上
     while(!t.isAlive()){
    Thread.sleep(500);
    }
      

  4.   

    在楼主的场景下,搞线程sleep就没意义了,数据几个毫秒能处理的,非要花几百毫秒等待,这不捣乱么!