计划做一个多线程下载的程序,强化一下对多线程的理解。计划第一步先做出一个多线程下载的基本功能,下一步做出断点续传等功能。
1.确定下载核心类的接口,接口代码如下,之前看过一大牛的代码,断点续传写得很不错,但是把URL中文件名的解析等工作都放到了下载类中,我觉得这样会导致这个类多担负了一个任务,而我这里,将URL中文件名的解析放到Client中去做,而Client可能是字符型的客户端,或者GUI,这都不会影响到下载核心类的实现。Client仅依赖于DownloadService这一接口,而DownloadService的具体实现可以变化而不影响Client。比如,我实现了两种DownloadService,一种
单线程,一种多线程的。客户端的代码无需改动。
2. 先实现单线程的下载,代码非常简单,如下。其中断点续传功能未实现。
其中需要用到连接的header设置文件header.properties,如下:
3. 实现多线程下载,代码如下:
4.字符客户端代码:
多线程实现测试结果如下:
单线程实现测试结果如下:
可以看到,使用8线程下载只用了18秒,最终平均速度为:107.75KB/s,而单线程下载却用了62秒,平均速度只有28.64KB/s,可见,多线程对下载的速度提升还是有很大帮助的。
而这里的多线程下载实现又有什么样的性能瓶颈呢?观察多线程下载的测试结果可以发现,刚开始速度非常快,等过了一段时间之后,速度明显有下降的趋势。这应该是因为,刚开始同时有多个线程下载,而到后来,某些线程下载完毕,只剩下极少数线程还在下载,并行降低,甚至退化成单线程下载,所以导致速度明显下降。
当然这里的实现可能还会存在诸多问题,并且断点续传还没有实现,希望最近能抽出一点时间来完成这个工作。
分享到:
相关推荐
用java实现多线程下载,可以学习参考呵呵
一个用JAVA实现多线程下载的应用程序和源代码!
java实现多线程下载文件功能,通过线程池管理,实现下载文件速度快,安全。
java多线程下载器,可以用java实现多线程下载功能
java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现多线程经典模型生产者消费java实现...
1. 把每个下载文件切成若干个块...2. HTTP Header里增加Range,如果服务器返回Cotent-Range 说明服务器支持文件定位,可以实现多线程下载 详细看这里 http://blog.csdn.net/maoxiang/archive/2010/04/02/5446293.aspx
利用java技术实现多线程文件传输
java实现多线程下载,控制台实时输出下载进度,对于学习多线程与网络有一定的帮助
Java实现多线程,使用Java实现多线程
刚学完多线程和线程池,以及线程爱好者。 使用场景及目标: 大文件的快速下载,经测试在100M带宽的网络下,下载一个40M的文件,不超过两秒钟,当然还得根据自己电脑的配置来讲。 其他说明: 文件如果特别小,而...
这里面有用Java实现的多线程下载的源程序,且是用NetBeans写的用户界面,方便大家阅读程序。
java多线程模拟队列实现排队叫号,多线程模拟排队叫号取号 java多线程模拟队列实现排队叫号,多线程模拟排队叫号取号
采用apache commons开发包,实现了FTP多线程下载,并有简单的包括进度条的界面,代码的运行:1 把自己的PC配置成FTP服务器(只需下载Serc-U软件)2 建立用户,用户名:zhangyu,密码:123,设置根目录,并拷贝进一些...
本程序实现了多线程下载的功能,对于Java编程爱好者,Java网络编程爱好者、以及学习线程部分的读者都是很好的资料
用JAVA实现多线程并发机制 且可以实现多功能
Java多线程读大文件 java多线程写文件:多线程往队列中写入数据
Java用多线程GUI实现购买车票界面
java多线程实现大批量数据切分成指定份数的数据,然后多线程处理入库或者导出,线程的个数和每份数据的数量都可以控制