本帖最后由 sjlucn 于 2012-01-11 13:14:38 编辑

解决方案 »

  1.   

    强制结束线程的做法是用 Thread.interrupt(),但一般不推荐这么干。HttpClient自身并没有实现并发,所以是依赖于主调函数的线程资源在执行,那么主线程被结束掉,HttpClient也就被结束掉了。
    结束线程的一般推荐做法是run()函数中,while(flag) { 循环的工作 }
    然后提供一个方法可以将flag设置为false
    但这个方式的问题就是:如果线程内部死锁了或者阻塞了,就无法结束该线程。
    补偿机制是:HttpClient中的操作,需要设置默认超时时间。
      

  2.   

    置标志位是初级的做法,高级的做法还是使用interrupt但是,你要清楚的是interrupt的含义,java本身并没有说调用了interrupt就终止了线程,相反,这需要自己去实现interrupt的语义
      

  3.   


    哥,比如50条线程,HttpClient 设置默认超时2秒,万一50条全超时,那么系统就会退出运行啦,如何才能使超时的再继续运行httpclient呢?
      

  4.   

    即便HttpClient超时,你也可以不要退出循环的啊client.getHttpConnectionManager().getParams().setConnectionTimeout(5000);
    while (flag) {
      try {
        // 请求服务器URL
      } catch (org.apache.commons.httpclient.ConnectTimeoutException ex) {
        // 准备继续重试
      }
    }