当前位置: 首页 > 面试题库 >

java使用线程下载多个文件

孟成化
2023-03-14
问题内容

我正在尝试使用线程下载多个与模式匹配的文件。该模式可以匹配1或5或10个差异大小的文件。

为了简单起见,可以说下载文件的实际代码在downloadFile()方法中,而fileNames是与模式匹配的文件名列表。我该如何使用线程。每个线程将仅下载一个文件。建议在for循环内创建一个新线程。

for (String name : fileNames){
    downloadFile(name, toPath);
}

问题答案:

您确实想使用ExecutorService而不是单个线程,它更干净,性能可能更高,并且使您以后可以更轻松地进行更改(线程计数,线程名称等):

ExecutorService pool = Executors.newFixedThreadPool(10);
for (String name : fileNames) {
    pool.submit(new DownloadTask(name, toPath));
}
pool.shutdown();
pool.awaitTermination(Long.MAX_VALUE, TimeUnit.MILLISECONDS);
// all tasks have now finished (unless an exception is thrown above)

在班上其他地方定义实际的工作马DownloadTask

private static class DownloadTask implements Runnable {

    private String name;
    private final String toPath;

    public DownloadTask(String name, String toPath) {
        this.name = name;
        this.toPath = toPath;
    }

    @Override
    public void run() {
        // surround with try-catch if downloadFile() throws something
        downloadFile(name, toPath);
    }
}

shutdown()方法的名称非常混乱,因为它“将允许先前提交的任务在终止之前执行”。awaitTermination()声明InterruptedException您需要处理。



 类似资料:
  • 本文向大家介绍java多线程实现文件下载,包括了java多线程实现文件下载的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了java多线程实现文件下载的具体代码,供大家参考,具体内容如下 1、DownloadManager类  2、DownloadThread类 3、TestDownload测试类 代码已经测试可以运行! 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多

  • 问题内容: 最近,我完成了一个项目,该项目比以前需要更多的IO交互,我觉得我想超越常规库(尤其是Common IO),并解决一些更深入的IO问题。 作为一项学术测试,我决定实现一个基本的多线程HTTP下载程序。这个想法很简单:提供要下载的URL,然后代码将下载文件。为了提高下载速度,将文件分块,并同时下载每个块(使用HTTP 标头)以使用尽可能多的带宽。 我有一个可以正常工作的原型,但是正如您可能

  • 本文向大家介绍java多线程下载文件原理解析,包括了java多线程下载文件原理解析的使用技巧和注意事项,需要的朋友参考一下 原理解析:利用RandomAccessFile在本地创建一个随机访问文件,文件大小和服务器要下载的文件大小相同。根据线程的数量(假设有三个线程),服务器的文件三等分,并把我们在本地创建的文件同样三等分,每个线程下载自己负责的部分,到相应的位置即可。 示例图: 示例demo 以

  • 本文向大家介绍Java多线程下载文件实例详解,包括了Java多线程下载文件实例详解的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Java多线程下载文件的具体代码,供大家参考,具体内容如下 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 本文向大家介绍java多线程实现文件下载功能,包括了java多线程实现文件下载功能的使用技巧和注意事项,需要的朋友参考一下 多线程下载文件的思路: 1.首先获取到文件的总大小 获取文件大小的方式是通过网络读取,getContentLength()即可获取到文件的大小,使用RandomAccessFile()支持随机访问 2.根据所准备的线程数据,计算每一个线程需要下载的文件的大小 上图显示下载40

  • 问题内容: 首先,每个人都需要知道我对Java编码还比较陌生。更准确地说,我是面向对象编程的新手。 问题。 我试图创建一个下载类来更新进度条,以显示其进度。可能还有其他决定,我决定在以后进行更新。 目前的问题是,在我看来,这不起作用。我可以在“主要”方法上做任何我想做的事情,而且GUI仍然响应迅速。根据我过去的编程经验,除非我对GUI进行线程化,否则这是不可能的。为什么是这样? 既然可以了,这样可