我使用ThreadPoolExecutor在http请求的HttpClient长轮询中运行了一个Runnable。
所以我正在以一种非常的方式提出请求:
httpClient = new HttpClient(new MultiThreadedHttpConnectionManager());
clientParams.setSoTimeout(timeout);
HttpMethodBase method = new GetMethod(request.toString());
int iGetResultCode = 0;
iGetResultCode = httpClient.executeMethod(method);
现在我真的想从其他线程(或某种方式)取消轮询。
shutdown并没有真正起作用,所以也许你知道我还能尝试什么。
答案 0 :(得分:1)
我和Stephen C在这一次。 httpclient.executeMethod看起来应该对InterruptedException(无论是IO还是其他)做出反应。如果您没有看到任何异常传播,您可以尝试从HttpClient关闭InputStream。
method.getResponseBodyAsStream().close();
这应该关闭从网站读取的输入流,并且还抛出线程池线程将看到的IOExceptions。如果连接确实关闭但你仍然没有看到任何IOException我会认为你在某个地方吞下了一个异常
答案 1 :(得分:0)
在您链接的文档中尝试下一个 - shutdownNow();
正如文档所说 - 这会在有问题的线程上调用Thread.interrupt()会导致它抛出InterruptedException - 你应该正确处理这个异常而不是忽略它。
答案 2 :(得分:0)
尝试杀死一个帖子总是一个坏主意。
你应该让线程干净地退出。添加一个同步的布尔字段来检查,如果它仍然可以继续轮询。
这仍然可以将http请求阻塞到套接字。离开它可能没关系,只是在返回后忽略结果。另一种方法是从另一个线程关闭套接字。 (在这种情况下,我不知道该怎么办。)