java - 在Java中,有没有可能执行一个方法一段时间,达到时间限制就停止?

标签 java time execution

我有这个下载网页的代码:

HttpURLConnection connection;

private String downloadContent() {
    InputStream content;
    Source parser;
    try {
        content = connection.getInputStream(); //<--here is the download
        parser = new Source(content);            
        content.close();
        return parser.toString();
    } catch (Exception e) {
        return null;
    }
}

下载时,我试图获取下载的数据量,如果达到限制,我将停止下载,但我没有找到这样做的方法。如果有人知道怎么做,请告诉我。

现在我想限制下载时间。示例:如果下载通过 20 秒,我将停止它。我想这样做是因为我的程序是一个网络爬虫,如果出现错误,它开始下载一个大文件,它会卡在下载中,这不是我想做的,所以欢迎按大小过滤下载,但我不知道,过滤时间可以防止这个问题。

最佳答案

实现此目的的正确方法如下:

public class TimeOut {

    public static class MyJob implements Callable<String> {

        @Override
        public String call() throws Exception {
            // Do something
            return "result";
        }

    }

    public static void main(String[] args) {

        Future<String> control
                = Executors.newSingleThreadExecutor().submit(new MyJob());

        try {

            String result = control.get(5, TimeUnit.SECONDS);

        } catch (TimeoutException ex) {

            // 5 seconds expired, we cancel the job !!!
            control.cancel(true);

        }
        catch (InterruptedException ex) {

        } catch (ExecutionException ex) {

        }

    }

}

关于java - 在Java中,有没有可能执行一个方法一段时间,达到时间限制就停止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6181420/

相关文章:

java - 泛型接口(interface)方法参数的实际类型

java - JsonElement 是整数还是 float ?

python - 值错误: time data ' 1:00:00' does not match format '%H:%M:%S'

php - 如何执行大型 PHP 脚本?

ruby - Ruby 的执行栈是什么样子的?

java - 将 MP3 播放列表保存到文件

java - 新查找器不生成实现(M3)

datetime - 用于发布日期的 HTML5 空 <time> 标记

python - 在给定时间启动函数

C#-异步执行中的四种模式