终止轮询HTTP请求

时间:2010-08-09 12:22:10

标签: java multithreading http

我使用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并没有真正起作用,所以也许你知道我还能尝试什么。

3 个答案:

答案 0 :(得分:1)

我和Stephen C在这一次。 httpclient.executeMethod看起来应该对InterruptedException(无论是IO还是其他)做出反应。如果您没有看到任何异常传播,您可以尝试从HttpClient关闭InputStream。

method.getResponseBodyAsStream().close();

这应该关闭从网站读取的输入流,并且还抛出线程池线程将看到的IOExceptions。如果连接确实关闭但你仍然没有看到任何IOException我会认为你在某个地方吞下了一个异常

答案 1 :(得分:0)

在您链接的文档中尝试下一个 - shutdownNow();

正如文档所说 - 这会在有问题的线程上调用Thread.interrupt()会导致它抛出InterruptedException - 你应该正确处理这个异常而不是忽略它。

答案 2 :(得分:0)

尝试杀死一个帖子总是一个坏主意。

你应该让线程干净地退出。添加一个同步的布尔字段来检查,如果它仍然可以继续轮询。

这仍然可以将http请求阻塞到套接字。离开它可能没关系,只是在返回后忽略结果。另一种方法是从另一个线程关闭套接字。 (在这种情况下,我不知道该怎么办。)