如何在几秒钟内没有响应后,从主线程停止运行TaskExecutor的线程?

时间:2011-07-18 19:32:26

标签: java multithreading spring threadpool

我已经使用了来自spring和future的TaskExecutor来完成任务的未来,但是现在当某些任务在一段时间内没有响应时我必须停止那些任务。我已经尝试过使用Future.cancel()方法但是它没有使用线程剧照似乎正在运行。你能建议我一些方法来阻止它吗? 我的线程正在等待从链接中读取Html内容..所以我如何停止任务

编辑:相关代码:

URL link = new URL(Content);
URLConnection yc = link.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(yc.getInputStream()));
String inputLine;
StringBuffer Sbuff = new StringBuffer();
while (((inputLine = in.readLine()) != null) &&
        ((Calendar.getInstance().getTimeInMillis() - TimeatStart) / 1000) < 4) {
    Sbuff.append(inputLine);
}

1 个答案:

答案 0 :(得分:2)

一般来说,你不这样做。如果您希望HTTP请求在挂起一段时间后停止,则在其上设置超时。最好让线程完成它所做的任何工作。

编辑:根据您的源代码,您需要做的第一件事是确保在URLConnection上调用connect()。否则,什么都不会发生。请参阅Java教程中的Working with URLs。之后,如果您仍想设置超时,请使用setConnectTimeout()设置在超时之前应尝试连接的时间,并setReadTimeout()设置等待接收数据后应等待的时间请求已发送。