`
withoutme_hw
  • 浏览: 9650 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

用Java实现多线程下载

 
阅读更多

计划做一个多线程下载的程序,强化一下对多线程的理解。计划第一步先做出一个多线程下载的基本功能,下一步做出断点续传等功能。

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实现多线程下载。 1. **线程基础知识**: - 线程是操作系统调度的基本单位,一个进程中可以有多个线程并发执行。 - Java提供了内置的线程支持,包括`Thread`类和`Runnable`接口,...

    Java实现多线程下载源代码

    本文将深入探讨如何使用Java实现多线程下载,并通过"Java实现多线程下载源代码"这一主题,详细解析其背后的原理和实践方法。 首先,我们要理解什么是多线程。在单线程环境下,程序执行是顺序的,一次只能执行一个...

    java多线程下载器

    java多线程下载器,可以用java实现多线程下载功能

    java实现多线程下载文件

    在Java编程中,多线程下载文件是一种优化大文件下载速度和效率的技术。它通过将一个大文件分割成多个小部分,然后同时启动多个线程分别下载这些部分,从而达到加速下载的效果。以下是对这个主题的详细解释: 1. **...

    一个用JAVA实现多线程下载的应用程序和源代码!

    在Java编程领域,多线程下载是一个常见的技术实践...这个Java实现的多线程下载程序是学习并发编程和网络I/O的一个良好实例,通过对源代码的研究,开发者可以了解如何在实际项目中有效地使用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.lang.Thread`类或者`java.util.concurrent`包中的`ExecutorService`和`Future`等接口。下面我们将详细探讨这些知识点: 1. **创建线程**: - **继承Thread类**:自定义一个类...

    java实现多线程文件传输

    利用java技术实现多线程文件传输

    java实现多线程下载代码

    java实现多线程下载,控制台实时输出下载进度,对于学习多线程与网络有一定的帮助

    Java实现多线程,使用Java实现多线程

    Java实现多线程,使用Java实现多线程

    Java 利用多线程实现文件的分片下载

    刚学完多线程和线程池,以及线程爱好者。 使用场景及目标: 大文件的快速下载,经测试在100M带宽的网络下,下载一个40M的文件,不超过两秒钟,当然还得根据自己电脑的配置来讲。 其他说明: 文件如果特别小,而...

    java多线程模拟队列实现排队叫号

    java多线程模拟队列实现排队叫号,多线程模拟排队叫号取号 java多线程模拟队列实现排队叫号,多线程模拟排队叫号取号

    (Java)FTP多线程下载源代码

    采用apache commons开发包,实现了FTP多线程下载,并有简单的包括进度条的界面,代码的运行:1 把自己的PC配置成FTP服务器(只需下载Serc-U软件)2 建立用户,用户名:zhangyu,密码:123,设置根目录,并拷贝进一些...

    java多线程简单下载器

    【Java多线程简单下载器】是一个初学者的编程作业,虽然代码可能较为混乱,但其核心功能已经实现,即通过多线程技术进行文件的下载。在Java中,多线程是并发处理的重要手段,它允许多个任务在同一时间执行,从而提高...

    java http多线程下载器

    Java HTTP多线程下载器是一种优化的网络资源下载工具,它利用Java编程语言实现了HTTP协议的下载功能,并结合多线程技术以提高下载速度。在本文中,我们将深入探讨Java HTTP多线程下载器的工作原理、核心概念以及实现...

    java多线程下载源代码

    在Java中实现多线程下载,主要涉及到以下几个核心知识点: 1. **线程基础**:首先,你需要了解Java中的`Thread`类或实现`Runnable`接口来创建和管理线程。每个线程负责下载文件的一个部分。 2. **文件分块**:在...

    java多线程下载代码

    以下是一个基于Java实现多线程下载的基本概念和关键点: 1. **线程创建**: 在Java中,我们通常使用`Thread`类或者实现`Runnable`接口来创建线程。在这个例子中,我们可以创建一个`DownloadThread`类,该类实现`...

Global site tag (gtag.js) - Google Analytics