java - Java并发通用文件下载

标签 java concurrency io download

我正在研究并发文件下载过程,但不确定采取什么方法。

关于:

应用程序将一堆文件捆绑在一起形成一个 zip 文件。这些文件通常位于硬盘驱动器上的公共(public)位置(例如/tmp)。然而,有时文件不存在,需要从远程 http 服务器下载。

问题:

  • 如何同时下载多个文件并确保没有其他线程(捆绑文件)同时下载同一文件?

  • 此外,如何确保在多个应用程序同时运行的情况下(请记住这些文件都位于公共(public)位置),应用程序的任何实例都不会同时下载相同的文件时间?

请描述策略以及实现该策略的方法。也许上述问题的解决方案已经存在。

谢谢!

最佳答案

  1. 您可以使用队列或数据库来下载所需的文件,只需保留一个 “状态”列和线程会将文件标记为“正在获取”。什么时候 完成后它将设置为“完成”。保留最后更改时间戳,如果 文件下载时间较长,请停止或重新开始下载。

  2. 为此文件队列使用数据库可能会确保其他应用程序 不要多次获取同一个文件(也许坚持下载 ETC;)。您还可以运行多个下载,并且数据库可以 用于跟踪下载速度、进度等;

将来你的问题应该用特定的代码、特定的问题来格式化。您的问题非常广泛,并提出了讨论(更适合聊天),而不是其他人可能使用的单一答案。

关于java - Java并发通用文件下载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20912466/

相关文章:

java - 正则表达式仅获取键值对并省略一些字符

java - 在嵌套的 Java 8 并行流操作中使用信号量可能会死锁。这是一个错误吗?

java - 使用 tempus-fugit 和 junit 时如何定义线程数?

Java while(input.hasnextline) 循环不退出?

java - 将类文件作为与 Java 代码分开的进程运行

java - maven依赖版本冲突

java - Spring Data JPA Update @Query 没有更新?

c++ - 获取/释放与顺序一致的内存顺序

c++ - 在 C++ 中以 'D' 作为指数前缀读取双科学记数法

java - 我可以再举一个 FileAttribute 的例子吗?