计划做一个多线程下载的程序,强化一下对多线程的理解。计划第一步先做出一个多线程下载的基本功能,下一步做出断点续传等功能。
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实现多线程下载。 1. **线程基础知识**: - 线程是操作系统调度的基本单位,一个进程中可以有多个线程并发执行。 - Java提供了内置的线程支持,包括`Thread`类和`Runnable`接口,...
本文将深入探讨如何使用Java实现多线程下载,并通过"Java实现多线程下载源代码"这一主题,详细解析其背后的原理和实践方法。 首先,我们要理解什么是多线程。在单线程环境下,程序执行是顺序的,一次只能执行一个...
在Java编程中,多线程下载文件是一种优化大文件下载速度和效率的技术。它通过将一个大文件分割成多个小部分,然后同时启动多个线程分别下载这些部分,从而达到加速下载的效果。以下是对这个主题的详细解释: 1. **...
在Java编程领域,多线程下载是一个常见的技术实践...这个Java实现的多线程下载程序是学习并发编程和网络I/O的一个良好实例,通过对源代码的研究,开发者可以了解如何在实际项目中有效地使用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实现多线程文件传输,并涵盖以下几个关键知识点: 1. **线程基础**:在Java中,线程是程序执行的基本单元,可以通过实现`Runnable`接口或继承`Thread`类来创建。`Runnable`接口更...
在Java中,实现多线程主要依赖于`java.lang.Thread`类或者`java.util.concurrent`包中的`ExecutorService`和`Future`等接口。下面我们将详细探讨这些知识点: 1. **创建线程**: - **继承Thread类**:自定义一个类...
刚学完多线程和线程池,以及线程爱好者。 使用场景及目标: 大文件的快速下载,经测试在100M带宽的网络下,下载一个40M的文件,不超过两秒钟,当然还得根据自己电脑的配置来讲。 其他说明: 文件如果特别小,而...
java实现多线程下载,控制台实时输出下载进度,对于学习多线程与网络有一定的帮助
Java实现多线程,使用Java实现多线程
在Java中实现多线程下载器涉及许多关键概念和技术,包括线程、并发控制、网络I/O以及进度监控。 1. **线程**:在Java中,线程是程序执行的最小单位,每个线程负责一部分文件的下载任务。Java提供两种方式创建线程:...
在Java中实现多线程下载主要涉及以下几个核心概念和技术: 1. **线程(Thread)**:Java中的`Thread`类是进行多线程操作的基础。每个线程负责下载文件的一部分。创建一个新的线程对象并调用其`start()`方法可以启动...
采用apache commons开发包,实现了FTP多线程下载,并有简单的包括进度条的界面,代码的运行:1 把自己的PC配置成FTP服务器(只需下载Serc-U软件)2 建立用户,用户名:zhangyu,密码:123,设置根目录,并拷贝进一些...
"工具"标签可能意味着作者可能介绍了一些实用的库或框架来辅助实现多线程下载。 QSDown可能是一个自定义的下载工具或者类库的名字,它可能是整个下载逻辑的核心组件,包括了上述的各个步骤。如果你能提供更详细的...
【Java多线程简单下载器】是一个初学者的编程作业,虽然代码可能较为混乱,但其核心功能已经实现,即通过多线程技术进行文件的下载。在Java中,多线程是并发处理的重要手段,它允许多个任务在同一时间执行,从而提高...
Java HTTP多线程下载器是一种优化的网络资源下载工具,它利用Java编程语言实现了HTTP协议的下载功能,并结合多线程技术以提高下载速度。在本文中,我们将深入探讨Java HTTP多线程下载器的工作原理、核心概念以及实现...