咨询一问题:多线程,如果彻底终止线程呢?
--------------------编程问答-------------------- 强制结束线程的做法是用 Thread.interrupt(),但一般不推荐这么干。HttpClient自身并没有实现并发,所以是依赖于主调函数的线程资源在执行,那么主线程被结束掉,HttpClient也就被结束掉了。结束线程的一般推荐做法是run()函数中,while(flag) { 循环的工作 }
然后提供一个方法可以将flag设置为false
但这个方式的问题就是:如果线程内部死锁了或者阻塞了,就无法结束该线程。
补偿机制是:HttpClient中的操作,需要设置默认超时时间。
--------------------编程问答--------------------
++ --------------------编程问答-------------------- 置标志位是初级的做法,高级的做法还是使用interrupt
但是,你要清楚的是interrupt的含义,java本身并没有说调用了interrupt就终止了线程,相反,这需要自己去实现interrupt的语义 --------------------编程问答--------------------
哥,比如50条线程,HttpClient 设置默认超时2秒,万一50条全超时,那么系统就会退出运行啦,如何才能使超时的再继续运行httpclient呢? --------------------编程问答--------------------
即便HttpClient超时,你也可以不要退出循环的啊。。。
client.getHttpConnectionManager().getParams().setConnectionTimeout(5000);
while (flag) {
try {
// 请求服务器URL
} catch (org.apache.commons.httpclient.ConnectTimeoutException ex) {
// 准备继续重试
}
} --------------------编程问答--------------------
哥,您真是神人啊,太佩服您啦,我领教啦
补充:Java , Java SE