java 使用线程下载多个文件

2024-01-11

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

为了简单起见,下载文件的实际代码位于 downloadFile() 方法中,而 fileNames 是与模式匹配的文件名列表。我如何使用线程来做到这一点。每个线程只会下载一个文件。是否建议在 for 循环内创建一个新线程。

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

你确实想使用执行服务 http://download.oracle.com/javase/6/docs/api/java/util/concurrent/ExecutorService.html它比单个线程更干净,可能更高效,并且使您能够在以后更轻松地更改内容(线程计数、线程名称等):

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);
    }
}

The shutdown()方法有一个非常令人困惑的名称,因为它“将允许先前提交的任务在终止之前执行”。awaitTermination()声明一个InterruptedException你需要处理。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java 使用线程下载多个文件 的相关文章

  • Android 线程和处理程序不工作

    我最近重构了一个旧项目 发现无论我做什么 特定部分都不再需要正常运行 本质上 我有一个带有 TextView 的 Activity 该视图按时间间隔从同一类中调用的线程更新 暂停是通过 Thread sleep 完成的 并且使用 Handl
  • Java 8 中异常类型推断的一个独特功能

    在为该网站上的另一个答案编写代码时 我遇到了这个特性 static void testSneaky final Exception e new Exception sneakyThrow e no problems here nonSnea
  • 视频文件转换/转码 Google App Engine

    我想启动一个云计算项目 其简单任务是 接收上传的视频文件 对它们进行一些转码 转换 允许用户下载 流式传输生成的文件 我刚在想ffmpeg作为集成在的外部命令行工具Java Google App engine Application 由于很
  • 打印数组时出错

    我得到这个代码 import java util import java io public class Oblig3A public static void main String args OrdAnalyse O new OrdAna
  • 从 java 类生成 xsd 的实用程序

    我想为以下类生成 xsd public class Node private String value private List
  • java.time.LocalDate 到 java.util.Date

    转换的最佳方式是什么java time LocalDate to java util Date Date from dateToReturn atStartOfDay ZoneId systemDefault toInstant 我一直在尝
  • 枚举内的枚举

    这不是我被卡住的问题 而是我正在寻找一种简洁的方式来编写我的代码 本质上 我正在编写一个事件驱动的应用程序 用户触发事件 事件被发送到适当的对象 然后对象处理事件 现在我正在编写偶数处理程序方法 我希望使用 switch 语句来确定如何处理
  • 如何在不使用反射的情况下查看对象是否是数组?

    在Java中如何在不使用反射的情况下查看对象是否是数组 如何在不使用反射的情况下迭代所有项目 我使用 Google GWT 所以不允许我使用反射 我很想在不使用反射的情况下实现以下方法 private boolean isArray fin
  • 我可以举一个使用 runOnUiThread 显示 toast 的示例吗?

    我搜索了很多地方 但找不到 runOnUiThread 实现的完整工作示例 我尝试了很多 但出现了很多错误 我只想显示线程中的吐司 这是最终的完整代码 感谢所有回复的人 import android app Activity import
  • 在仔细锁定但不受信任的代码上使用 Thread.stop()

    我知道Thread stop 已被弃用 并且有充分的理由 它通常不安全 但这并不意味着它是never安全 据我所知 在我想要使用它的上下文中它是安全的 而且 据我所知 我别无选择 上下文是一个两人策略游戏的第三方插件 以国际象棋为例 第三方
  • dotNet:有没有办法在 UI 线程上执行 Join 语句?

    我正在编写一个简单的线程应用程序 当单击开始按钮时 应用程序禁用此按钮 运行 5 个线程 只需进行 For 迭代并更新 5 个进度条 最后一个线程正在等待线程结束 以重新启用我的开始按钮 问题 用户看到按钮在进度条达到 100 之前已启用
  • 检查对象是否为空

    我有一个链表 其中第一个节点包含空对象 表示firstNode data等于null firstNode nextPointer null firstNode previousPointer null 我想检查firstNode 是否为空
  • 如何解决声纳中的 dodgy:unchecked/unconfirmedcast 问题?

    我在下面的代码中通过声纳获得异常 我该如何解决这个问题 建议我 Override public boolean validate BaseInfo infoObject boolean isValid true AckTransferPay
  • Maven编译错误:包不存在

    我正在尝试向现有企业项目添加 Maven 支持 这是一个多模块项目 前 2 个模块编译和打包没有问题 但我面临编译错误 我尝试在多个模块中使用相同的依赖项 我的结构是 gt parent gt pom xml gt module 1 gt
  • 如何强制 Spark 执行代码?

    我如何强制 Spark 执行对 map 的调用 即使它认为由于其惰性求值而不需要执行它 我试过把cache 与地图调用 但这仍然没有解决问题 我的地图方法实际上将结果上传到 HDFS 所以 它并非无用 但 Spark 认为它是无用的 简短回
  • 使用 System.out.println 显示特殊字符

    我在将带有特殊字符的文本从网络服务发送或显示到数据库时遇到问题 在我的 Eclipse 上 我已将字符编码设置为 UTF 8 但它仍然不允许我显示字符 例如 像下面的代码一样简单的打印 String test System out prin
  • 如何在 VSCode 中热重载 Tomcat 服务器

    我正在从 Eclipse IDE VSCode 分别用于编码 Java servlet 和 HTML CSS JS 网页 迁移到仅使用 Visual Studio Code 因为它的轻量级 我为 VSCode 安装了几个 Java 扩展 R
  • 如何为用户的活动设置计时器?

    如果用户在 5 小时内停止工作 我需要执行特定的方法 假设用户已登录 但他在 5 小时内没有向数据库的特定表添加任何记录 任何时候用户将记录添加到指定的表中 该特定用户的计时器都应该重置 否则它将继续运行 如果达到 5 小时 应用程序应显示
  • 带有客户端认证连接的 HTTP 客户端的 SOAP 请求超时异常

    我正在尝试点击具有客户端认证的网址并生成密钥 keytool genkey alias server keyalg RSA keystore example jks validity 10950 和密钥存储 keytool import t
  • 无法取消 GWT 中的重复计时器

    我正在尝试在 GWT 中安排一个重复计时器 它将每一毫秒运行一次 轮询某个事件 如果发现满意 则执行某些操作并取消计时器 我尝试这样做 final Timer t new Timer public void run if condition

随机推荐

  • 使用 Perl 解析 HTML 页面的正则表达式链接 [重复]

    这个问题在这里已经有答案了 可能的重复 如何使用 Perl 从 HTML 中删除外部链接 https stackoverflow com questions 1598053 how can i remove external links f
  • 可以在 Final 块的中间引发 ThreadAbortException 吗?

    假设以下代码在单独的线程中运行 try var stuffToDispose new SomeClassThatNeedsDisposing doing thing with stuffToDispose finally if stuffT
  • $HOME/.local 的用途是什么

    我注意到我有 HOME local在我的机器上 似乎这个目录主要包含与 python 相关的内容 here http termbin com vw35是完整的列表吗 有点长 我想问这个目录是哪个动作创建的 我想是pip install us
  • 使用 VB.NET 访问 %appdata%

    如何通过VB NET访问 appdata 中的文件 例如 C Users Kuzon AppData Roaming program 如果是在另一台 Windows 7 计算机上 我该如何访问该文件 另外 在 Windows XP 上您将如
  • 如何在 EXT-GWT 中拆分面板?

    我在用着ext gwt http www sencha com products gwt 并且不知道如何分割面板 以便我有 2 个小部件 可调整大小的分割器的每一侧各一个 两个小部件的高度均为 100 宽度可变 本质上 我想要的是这样的 W
  • Firebase:如何从数据中检索存在特定键的记录?

    我在 firebase 中的数据如下所示 application companies firebase creation name Firebase Inc location USA google creattion name Google
  • 如何将Android应用程序发布到特定屏幕分辨率的市场?

    我为屏幕尺寸为 480x800 的设备开发了一款 Android 应用程序 现在我不知道如何针对这个特定的屏幕尺寸发布这个应用程序 如果我使用清单中的标签进行过滤 它可以接受 480x800 WVGA800 和 480x854 WVGA85
  • 引用变量的增量运算符

    为什么预增量可以在引用变量上工作 而后增量却不能 include
  • PHP:时差(分:秒:十分位)

    操作时如何计算时差minutes seconds tenth 例如我怎样才能实现这个例子 40 24 5 67 52 4 27 27 9 我本来打算用这个 但后来发现缺少十分之一 time1 new date 40 24 5 time2 n
  • 0 < lineWidth < 1 时的画布线条行为

    出于好奇 我想尝试设置lineWidth lt 1因为即使我的分辨率设置正确 1px 的线条看起来也很粗 不出所料 它不起作用 但在 Chrome 和 Firefox 上有这种奇怪的行为 未在其他地方测试过 左边是 lineWidth 1
  • 首先代码自定义SQL迁移超时异常

    我正在尝试通过执行自定义 Sql 使用实体框架迁移创建全文索引 我的迁移类如下所示 public partial class DocumentContentFullTextIndex DbMigration public override
  • Django 在 BooleanField 上进行注释

    我有以下型号 class Foo models Model pass class Bar models Model foo models ForeignKey Foo is successful models BooleanField 我想
  • Chrome / Firefox 中的 Javascript 内存使用和调试(雷区)

    我目前正在使用 Google O3D WebGL 框架开发一个应用程序 这是我第一次如此密集地使用 JavaScript 这些功能只完成了 20 左右 但应用程序本身已经开始占用大约 160 meg 内存 同时让应用程序运行 在 Chrom
  • 指向数组第一个元素的指针的地址?

    我对指向数组开头的指针在内存中的位置有点困惑 根据我的理解 数组和指针可以使用相同的函数 如 和 因此 如果我创建一个 char 数组 我会理解 buffer buffer 0 所以不带括号的数组名就像一个指针 其中包含数组第一个条目的地址
  • PHP Ratchet:找不到类 Memcache

    我正在关注 Ratchet 的教程 对于SessionProvider页面 代码是这样的
  • Meteor 如何使用多个 .less 文件

    我正在尝试在 Meteor 应用程序中使用两个 less 文件 所有文件都位于单个 Meteor 应用程序文件夹中 我有一个 less 文件 它定义了一般 UI 外观 在 ui less 中 ui gradient topdown from
  • XAMPP - 错误:MySQL 意外关闭

    由于某种原因 我重新安装了 XAMPP 但 MySQL 无法工作 在控制台中出现以下错误 01 56 03 mysql Error MySQL shutdown unexpectedly 01 56 03 mysql This may be
  • 通过 powershell 在 jenkins 中使用 AnsiColor

    关于如何使用 powershell 为 Jenkins 上的输出着色有什么想法吗 我已经在 J enkins 上安装了 AnsiColor 插件 并且已将作业设置为使用 AnsiColor 唯一的问题是如何让我的powershell在Jen
  • 通过 StoredProcedure 每日/每周/每月记录计数搜索

    Using 微软SQL服务器 我做了一个名为SP Get CallsLogged 我有一个名为TRN Call 它有一个名为CallTime这是一个日期时间 我的应用程序中有一个网页 用户在其中输入 开始日期 约会时间 EndDate 约会
  • java 使用线程下载多个文件

    我正在尝试使用线程下载与模式匹配的多个文件 该模式可以匹配 1 5 或 10 个不同大小的文件 为了简单起见 下载文件的实际代码位于 downloadFile 方法中 而 fileNames 是与模式匹配的文件名列表 我如何使用线程来做到这