基于java多线程的下载器源码剖析.doc
还剩
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. 新建下载上面讲解的是系统初始化所做的事情。那么当我们把开始下载一个文件时系统是怎么
发表评论
暂无评论,赶快抢占沙发吧。