本文实现了一个基于Java多线程的下载器,可提供的功能有:
1. 对文件使用多线程下载,并显示每时刻的下载速度。
2. 对多个下载进行管理,包括线程调度,内存管理等。
这篇文章的结构如下:首先讨论如何实现利用Java多线程对单个文件进行下载。然后讨论当系统中有多个文件下载,如何对这些下载进行管理。包括线程调度,内存管理等。
一:单个文件下载的管理
1. 单文件下载类层次
首先简要介绍一下单个文件下载管理的类层次:来一张图来表示。
- 为需要下载的文件创建一个Download类,Download负责管理该文件下载时的线程管理、文件管理、当前速度计算等操作。
- 根据线程的数目tNum,将该文件分为tNum段,每段为一个DownloadBlock。在实际下载的过程中,并不是一次把所有的东西下载完,而是每次下载固定size的一段Di。所以每个DownloadBlock又会分成n段。
- 为每个DownloadBlock申请一个线程DownloadThread。其主要作用就是每次下载一段Di,并将其写入到文件中。
2. 单文件下载
对于单个下载,步骤如下
- 连接资源服务器,获取资源信息,创建文件
- 切分资源,为每个线程分配固定的下载区域。