Java多线程下载器
Time: 2025-02-20 Thursday 23:56:01
Author: Jackasher
Java多线程下载器
该项目用于练习java多线程的学习,同时强化对io流,http的理解,使用分块多线程下载,最后合并的方式,同时实时记录下载的情况,下载数据,及网速,verion_01为单线程,version_02为多线程模块,是个合适的作为练习的项目
具体变量参数在Constant类里面调整
程序简要说明
主类为Downloader
,记录类为DownloaderInfoThread
,实际下载类为Downloaderthread
,通过地址建立Http连接
1 |
|
通过请求属性实现分片下载
1 |
|
通过线程池实现每一秒记录信息
1 |
|
通过累计下载字节进行一系列数据的记录
1 |
|
通过线程池执行线程任务
1 |
|
印象深刻的地方
一是,如何处理线程的异步问题,需要下载全部执行完成后再合并,我们的下载线程是继承的Callable
,返回的是Future
,将返回值装在集合里面,便利,通过future.get()
阻塞,完成后进行合并,也可以使用CountDownLatch
,每完成一个线程就countDown
一下
二是,最后出现的磁盘损坏问题,经过排查发现是合并时出现问题,查询ai后发现,最后没有关闭缓冲流,导致缓冲流里面的内容没有写入文件,默认情况下缓冲流只会在充满,手动刷新,关闭的情况写入,所以推荐使用try-with-resources
Java多线程下载器
http://example.com/2025/02/20/Java多线程下载器/