java下载文件控制下载连接数_基于java多线程的下载器源码剖析.doc

本文档介绍了一个基于Java多线程实现的文件下载器的设计原理与源码分析,重点探讨了内存管理、任务调度及网络连接数的动态调整等关键技术点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基于java多线程的下载器源码剖析.doc

1efcb3afe7e71c5c0a0f93845cb638d7.gif

还剩

25页未读,

继续阅读

下载文档到电脑,马上远离加班熬夜!

亲,很抱歉,此页已超出免费预览范围啦!

如果喜欢就下载吧,价低环保!

内容要点:

? super(); ? this.config = config; ? start(); ? } 而为了能够得到一个实例,我们在该类中定义了一个静态变量[java] view plaincopy? private static Downloader downloader = null; 然后再通过一个public函数得到该 Downloader的实例[java]争抢能力与网络连接数一般来讲网络连接数越多,整体争抢到的资源越多,但不是绝对的线性正比关系的,而且增多到一定程度后网络质量下降。这些取决于复杂的网络环境和本机其他程序的影响。所以,通过测试我们会通过在不同网络环境下测试,得到最大连接数的参考值。而且,我们无法回避的是,在有些情况下有可能出现,由于最大连接数的限制,而性能没有不限制的好。这里如何动态调整最大连接数,通过技术手段探知网络状况,从而智能调而当整个文件都下载完毕之后,需要把当前Download的所有缓存归还给系统( Downloader)[java] view plaincopy? for(DownloadBlock block : blockCache){ ? Downloader.getInstance().putDownloadBlock(block); ? } 总结:上面的代码演示了一个简单的内管管理模块。而为已经申请的内存重复利用。在每个Download 类中都有一个缓存池,即ConcurrentLinkedQueue blockCache;而整个的系统Downloader也会有一个大的ConcurrentLinkedQueue blockCache;那么这两者是怎样的关系呢?在Download 类对文件进行切分的时候,需要创建DownloadBlock,而DownloadBlock是根据getDow? } ? } [java] view plaincopy? //getDownloadBlock()定义如下: ? private DownloadBlock getDownloadBlock(){ ? downs= downloads.toArray(); ? if(downs== null || downs.length == 0) ? retur? } ? ? // stop the tasks ? checkSpeedTask.cancel(); ? splitBlockTask.cancel(); ? ? long total = System.currentTimeMillis() OK,我们看看,Download是切分文件时是如何与整个系统联系在一起。[java] view plaincopy? public void run(){ ? try { ? begin = System.currentTimeMillis(); ? ? // get length ? log.i if(down.getRemainThread()> download.getRemainThread()) ? download= down; ? } ? download.descRemainThread(); ? returndownload.getDownloadBlock(); ? } 2. 新建下载上面讲解的是系统初始化所做的事情。那么当我们把开始下载一个文件时系统是怎么

发表评论

暂无评论,赶快抢占沙发吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值