毕业设计(论文)-基于JAVA的多线程下载工具的实现.doc_第1页
毕业设计(论文)-基于JAVA的多线程下载工具的实现.doc_第2页
毕业设计(论文)-基于JAVA的多线程下载工具的实现.doc_第3页
毕业设计(论文)-基于JAVA的多线程下载工具的实现.doc_第4页
毕业设计(论文)-基于JAVA的多线程下载工具的实现.doc_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

太原理工大学毕业设计(论文)用纸基于JAVA的多线程下载工具的实现摘 要随着现代科技的迅猛发展,以信息化为基础的计算机技术已成为全球信息通信的雏形,计算机的发展逐渐进入一个全新的发展阶段,成为人们现在众所周知的热门话题。计算机技术的发展,使得网络成为人们获取信息的重要途径之一。人们获取数据,进行通信的方式其实就是将数据从一方传送到另一方。但是在传送的过程中,通常会由于一些突发状况,如网络接触不良导致掉线、电脑死机、蓝屏、或者电脑的一些其他原因,使得数据传输失败。尤其适当用户看到已经传到快要完成的时候,突然中断,导致其不得不重新下载,这给用户带来了很大的不便。多线程下载可以实现多个任务同步下载,大大的提高了下在速度,为用户节省了时间。因此,研究JAVA多线程下载对人们方便使用下载工具下载内容具有重要意义的。关键字:JAVA;多线程下载;数据传输全套设计加扣 3012250582IIIBased on the Realization of the Java Multi-thread Download ToolsAbstractWith the rapid development of modern science and technology, represented by the Internet also obtains the rapid development of computer network. Therefore, prompting the development of computer has entered a new stage, which become a hot topic that is known to all and everyone has concerned. The development of computer technology makes the network become one of the most important ways of accessing to information. To get the data, the way people communicate is to transfer data from one party to another party. But in the process of transfer, usually due to some unexpected situation, such as network poor contact lead t o drop, computer crashes, blue screen, or some other reasons, the computer makes a failure in data transmission. Particularly appropriate users have seen it almost finished, s suddenly break, it has to download again, which gives the user a great deal of inconvenience. Multi-threaded download can implement multiple task synchronous download, greatly improves the speed, which saves time for the users. Therefore, be convenient for people to study JAVA multi-thread download in using download tools to download content is of great significance.Key words: Java; Multi-threaded download; data transmission 太原理工大学毕业设计(论文)用纸目 录摘 要IAbstractII1 绪论11.1 课题背景11.2 选题意义11.2.1 理论意义11.2.2 现实意义21.3 现状分析21.4 本文结构32 常用下载技术现状42.1 Web下载42.2 P2P下载52.3 流媒体下载62.4 多线程下载73 相关概念介绍93.1 Java多线程93.2 线程的创建和退出及其函数调用93.3 HTTP协议103.4 URL和HTTP URL104 多线程下载工具需求分析114.1 用户需求分析114.2 可行性分析114.2.1 技术可行性124.2.2 经济可行性124.2.3 操作可行性124.3 业务流分析125 多线程下载工具的设计135.1 整体设计135.2 模块划分135.3 数据下载流程145.4 关键技术155.5 基本操作156 多线程下载工具的实现176.1 下载任务模块176.2 线程启动模块186.3 用户界面模块196.4 下载工具的实现197 系统测试227.1 系统测试环境227.1.1 网络环境227.1.2 硬件环境237.2 软硬件配置237.2.1 测试程序的启动237.2.2 测试新建下载任务247.2.3 下载任务测试25结论26参考文献27致谢28外文原文29中文翻译392 太原理工大学毕业设计(论文)用纸1 绪论1.1 课题背景21世纪的主要特征是数字化、网络化和信息化,它是以网络为核心的信息化时代。计算机对社会人类社会生活的各个方面并且对经济的发展发挥着无可替代的作用。计算机可以使使用者快速传输文件资料,以及使用户在网上搜索并下载个人所需的各种资料,包括图片、音乐、小说和视频等。很多人认为现在已经是Internet的时代,因为计算机在不断的以各种形式改变着人们的生活和工作,他给各个国家的发展带来了巨大的好处,并加快了全球信息化的进程。计算机的快速发展,使得人们对数据的获得要求也越来越高。在计算机发展初期,用户获得数据的方式也很简单,就是以读取的形式,这种方式下载资料,有很多的弊端,不仅下载速度缓慢,而且当计算机由于某种原因:断网、断电或电脑故障时,就会导致下载失败,想要重新下载,就必须从头开始再下载一次。而且,如果是下载较大型的文件,其传输速度缓慢,给用户带来太多的不便。除此之外,最初的下载方式不支持一次性下载多个文件,只能下载一个。所以对于计算机不断发展的今天,研究出一种下载快速又相对稳定的下载工具是至关重要的。现如今,计算机网络以惊人的速度发展壮大,逐渐走进寻常百姓家中,已经成为人们生活、学习和工作的必须品。而随着计算机的发展,对于人们获取资源的方式也在不断的更新。开始人们获取资源的形式是通过访问服务器,即人们熟知的C/S模式,C是客户端,S是服务端,客户端通过向服务器发送请求,然后服务器把客户端所需的数据传递过去,这是最简单的传递方式。与此相类似的,还有目前流行的P2P(Peer-To-Peer)下载技术,它的实现原理是两个用户之间可以传递信息,而无需经过服务器的传输。与C/S模式相比,这种下载方式更加快速便捷。在此基础上,随着网络的快速发展,人们还研究出一种流媒体下载技术,这种下载技术的优点在于可以缓存下载,在使用的同时达到下载的目的,既方便了用户的使用,也下载了资源,为用户带来了很大的方便。由以上的分析可以看出,随着计算机网络的不断发展,信息在不断更新的同时,技术也在不断的进步,同时新的下载技术也在运用而生,为人们的生活和工作提供极大的便利。而多线程下载技术,是目前很流行的一种技术,它不仅可以解决多任务下载,即几个文件同步下载,也有断点续传的功能,即在因为各种突发状况阻止了正常的下载时,会保存已有的下载资料,当再一次下载时,会从上一次停止下载的地方开始继续下载。多线程下载技术还可以提高带宽和CPU的使用效率,可见这种下载技术与最初的下载技术相比为用户带来了很多的便捷,同时也加快了下载的速度。笔者撰写本文,就是通过比较已有的下载工具,发掘其的优缺点,在此基础上研究和分析多线程下载技术,并实现了这一技术。1.2 选题意义1.2.1 理论意义从理论意义上看,多线程下载技术与传统的下载工具相比,有很多优点,这种技术可以提高下载速度从而增强系统利用率,除此之外由于该技术能够支持多任务同步进行下载,所以可以提高CPU的利用率,还能充分利用系统内部的有用资源。在如今的科技高速发展情况下,软件和新技术的开发的更新换代速度飞快,人们对更加新颖、更加实用的软件资源都如饥似渴,电子产业在拥有良好的市场的前提下,想要发展的话就必须拥有良好的运作经营模式和远大的发展战略。而实际上国内的技术水准已经与国外许多优秀电子企业的水准不相伯仲,但是,围栏网应对更加激烈的国际竞争,我们必须不断研究新技术,提出新设想,设计出更加新颖方便的软件来。因此,我们必须不断学习,研究开发。本课题是基于学习Java课程以后,对其进一步研究,深入探索,并且借鉴前人的观点而提出来的,在研究前人的技术后,对Java多线程进一步探索,做出了多线程下载工具。1.2.2 现实意义从现实意义上看,电子时代是21世纪的新型代表,它推动着人们的生活逐渐步入信息化时代。据不完全统计,近几年,我国网民以百分之三十多的速度递增。据专家组统计目前我国网民的人数已经达到四亿多。现如今,人们查找资料,第一时间想到的就是从网上获取,下载自己所需的资源。而用户对网络的要求也不断加大,他们为了节省时间,通常会选择最安全,最稳定,下载最快的工具来获取资源。随着十八大全面深化改革的提出,科技的发展占据着举足轻重的作用,特别是对计算机技术的推动有很重要的意义。Java多线程下载工具可以为人们提高工作效率,有效利用资源配置有很大的帮助,所以本课题的提出既有一定的理论意义,也有一定的现实意义。1.3 现状分析线程技术的提出是在60年代左右开始的,然而,真正将多线程这一技术使用到操作系统中,是在80年代中期。传统的Unix通常也支持多线程技术,但是一般在一个进程中只能有一个线程,因此多线程便意味着多进程。到目前为止,多线程技术已经被很多操作系统所支持,例如:Windows,Linux。为什么有了进程这个概念后,还要引入线程的概念?而且多线程技术和多进程技术的优点何在?以及什么样的技术程序会使用多线程技术?这些都是应该首先要考虑的问题。在20世纪60年代左右,进程这一名词首先在麻省理工学院的MULTICS系统和IBM的CISS/360系统中被引进和说明。进程和线程是调度的基本单位,它们管理的是操作系统的核心部分,线程描述的是进程内的执行,负责执行包含在进程的地址空间中的代码。进程有三个重要特性,分别是:第一,独立性。进程是系统中独立存在的实体,它可以拥有自己独立的资源。例如:文件和设备描述符等。未经进程的允许,其他进程不能访问到这些资源。第二,动态性。程序只是一个静态的指令集合,而进程是一个正在系统中活动的指令集合在进程中加入了时间的概念。进程具有自己的生命周期和各种不同的状态。第三,并发性。并发性由独立性和动态性衍生而来。若干个进程可以在单处理机状态上并发执行。并发与并行:并行,指在同一时刻内,有多条指令在多个处理机上同时执行。并发,指在同一时刻内,只能有一条指令执行,但多个进程的指令被快速轮换执行,使得在宏观上具有多个进程同时执行的效果。线程和进程相比有以下优点:第一,“节俭”的多任务操作方式。在Linux系统下,启动一个新的进程必须分配给独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段。运行一个进程中的多个线程,彼此之间使用相同的地址空间、共享大部分数据、启动一个线程所花费的空间远远小于启动一个进程所花费的时间。线程间彼此切换所需的时间也远远小于进程间切换所需要的时间。第二,线程间方便的通信机制。对不同进程来说,它们具有独立的数据空间,要进行数据的传递只能通过通信的方式进行,这种方式费时而不方便。由于同一进程下的线程之间共享数据空间,它们共享全局变量、共享进程指令、大多数数据和打开的文件(如描述字)、信号处理程序和信号处置、当前工作目录、用户ID和组ID,一个线程的数据可以直接为其他线程所用,快捷方便。第三,提高运用程序响应。对图形界面的程序尤其有意义当一个操作耗时很长时,整个系统都会等待这个操作,此时程序不会响应键盘、鼠标、菜单的操作使用多线程技术,将耗时长的操作置于一个新的线程,可以避免这种尴尬的情况。第四,使多CPU系统更加有效。操作系统会保证当线程数不大于CPU数目时不同的线程运行于不同的CPU上。第五,改善程序结构。进程分为多个线程,成为几个独立或半独立的运行部分,程序利于理解和修改。第六,数据共享问题。有的变量不能同时被两个线程所修改,有的子程序中声明为静态的数据更有可能给多线程程序带来灾难性的打击,带来了同步问题。这些是最需要注意的问题。1.4 本文结构本文通过参考各学者们对下载工具的研究内容,深入分析各种下载技术的工作原理以及它们之间的的优缺点,着重探讨多线程下载技术,并在此基础上对多线程下载技术进行研究,实现其功能。首先从网络的发展与现状入手,对网络上流行的下载工具进行介绍。随后总体介绍论文的研究内容,随后阐述论文涉及到的相关技术,对相关技术进行深入分析,介绍本文设计用到的相关概念,最后对全文进行总结。其结构设置如下:第一部分 绪论主要论述关于多线程下载技术的背景介绍,研究意义,现状分析等;第二部分 主要是分析常用的下载技术的现状,并对比分析各种下载技术的优缺点;第三部分 对所涉及到多线程下载技术相关概念的介绍;第四部分 多线程下载技术的需求分析;第五部分 多线程下载技术的设计部分;第六部分 多线程下载工具功能实现第七部分 系统测试。2 常用下载技术现状网络下载工具的技术的演进大体上可以划分为四个阶段,分别是Web下载、P2P下载、流媒体下载、多线程下载。这些技术随着计算机的发展,不断有所突破,不断进步着,给人们的生活带来了极大的方便。以下分别对这些技术做简要的介绍,对各自的主要技术核心做出分析。2.1 Web下载这种方式在互联网上是最常用的,也是最传统的方式。最初用户在网上发送邮件或者下载资料时,都是使用C/S方式。C(client)是客户,S(server)是服务器它们都是在通信过程中的两个应用程序。当客户端向服务器提出下载请求时,服务器端收到请求后,就会将信息资源传输个给客户端。最常用的Web下载方式有两种,分别是HTTP和FTP,这是两种常见的传输协议,这两种协议规定了浏览器如何向服务器请求万维网文档,并且服务器如何把文档传送给浏览器的过程。用户使用这两种协议与服务器发生链接,然后把数据传送并保存到本地,实现下载的功能。HTTP是Hyper Text Transportation Protocol的简称,即超文本传输协议。这种下载方式是最传统的,也是最简单的一种。其下载的基本原理就是客户利用HTTP这种特殊的合适和规则向服务器传递信息,然后服务器发出应答请求,将数据传输给用户并保存到用户电脑上,以此来实现下载的目的。这种下载方式是最初开始的,其他在后来发展起来的下载方式都是以HTTP下载为基础衍生出来的,它在所有的下载方式中发挥着很重要的作用。然而HTTP下载也存在着一些弊端,在客户请求下载时,必须先建立TCP连接,然后才能向服务器发送下载资源的请求。但是一般服务器上的数据是有限的,有时候客户可能无法找到自己想要的信息,这就给客户资料的来源带来麻烦。并且,在同一时间,可能会有不同的客户向同一台服务器发送了下载请求,导致服务器向多个客户发送响应,会减缓响应的速度,从而导致下载速度缓慢,影响客户的工作和学习。FTP是File Transfer Protocol的简称,中文名是文件传输协议,它是Internet上使用最广的文件传输协议。FTP下载也是网络上下载资源很传统的一种方式。它提供交互式的访问,允许用户指明文件类型和格式、可以控制下载数据的用户数、屏蔽计算机系统的细节、可以将下载资源的速度控制在一定的范围等这些优势。这种下载技术比较适合下载容量比较大的资源,比如:电影、视频等。客户端服务器服务下载请求收到下载请求Web下载的工作原理见图2.1所示。图2.1 Web下载原理图2.2 P2P下载P2P下载(Peer-To-Peer),也叫对等连接指的是两个主机在通信的过程中不加以分别服务请求方和服务提供方,它们是平级的关系。在通信的过程中,如果两台主机之间运行了对等连接软件即P2P,它们之间的通信就是平等的,对等的。并且,二者之间可以相互下载对方存储在硬盘中的共享文档。P2P的工作原理的实质还是客户服务器的方式,但是其中的每台主机既可以作服务器也可以做客户机,假设PC1向PC2发出下载请求,那么PC2作为服务器把信息传递给PC1,而同时PC3向PC1发出下载请求,此时PC1作为服务器传递数据给PC3。所以,PC1在这个过程中,既作为客户机下载数据,也作为服务器传输数据。这就是P2P的工作原理。有P2P的工作原理可以看出,P2P下载有很多优点:随着网络的不断发展,网络开始提供音频、视频等服务,利用宽带上网的人数也不断增加。而很多用户接入宽带是因为其网速比较快,在下载资料时速度一般较快。这种状况致使网上的一些服务器是在超负荷下工作,有些服务器甚至在许多用户不停地访问时导致瘫痪,无法工作。而P2P下载方式不需要集中式的服务器,从而不存在集中服务器导致的瓶颈问题,因而这种下载方式受到很多用户的青睐。在P2P的工作方式下,所有的文件都是在普通的网络用户之间传输,其原理相当于许多分散在各地的服务器,向其他的用户提供下载资源。而且,P2P下载时,每个主机既是服务器又是客户机,与C/S下载方式相比,降低了对服务器的性能要求,而且资源可以存储在不同的节点(即主机)之间,对服务器的压力不会很大,实现了负载均衡。再者,其下载过程是不同的节点之间进行的,其中如果这两个节点之间出现了通信不畅通问题时,不会影响到其他主机之间的通信。这些优点使得P2P文件下载技术在Internet数据下载中占据了相当大的份额,相比Web下载的比例要多。然而随着P2P下载技术的广泛使用,也产生了一些问题需要解决。这些问题的产生一方面使人们想办法解决这些问题,另一方面也促使人们开发更为先进的下载技术。其中最突出的问题就是文件的知识产权问题,还有就是不法分子会在网上传播一些非法盗版的、不健康的视频等,这些问题导致P2P下载技术很难有效的管理,这使得这一技术在这方面问题上还存在相当大的难度。其实,P2P网络是一种较为脆弱的网络,P2P中节点之间的关系,就好比是人与人之间的关系。这些节点的建立,就像人际关系一样,为了共同的目的或兴趣爱好聚集在一起。它们建立关系的时候是平等互信的,但是当网络范围扩大时,它们的关系很可能就会偏离原来的状态。导致节点之间出现欺骗或传递虚假信息,所以P2P建立的关系是较为脆弱的。而且,在P2P网络中,服务器的身份已经不是网络的中心,但它扔控制整个网络的工作,当服务器出现故障是会导致整个网络的瘫痪。而且,目前P2P文件共享程序的大量使用,消耗了网络上的大量带宽,加之用户一些并非重要文件的随意下载,以及大量视频、音频等较大文件的下载,导致带宽的浪费更为严重,致使网络运营商也没有从中盈利。除此之外,由于P2P网络的不安全性,拥有大量用户的网络很可能成为黑客或不法分子图利的对象,这些缺点导致P2P极大的不安全性。P2P下载方式的工作原理用图表示,可见下图2.2所示。服务器PC1PC2PC3图2.2 P2P下载技术工作原理2.3 流媒体下载流媒体下载技术具有单一性,它专门用于网络多媒体信息的传播和处理。它与上述两种下载方式不同的特点是它可以一边播放一边下载。它的使用需要一定的缓存。因为一个实时音视频源或存储的音视频文件在传输中被分解为许多数据包,而网络是动态变化的,各个包选择的路由可能不同,所以到达客户端的时延也不同,可能先发的数据包会后到。所以就要使用缓存来消除时延和抖动,以保证数据包顺序正确,从而使媒体数据能够连续输出。其工作原理是:首先它的实现需要合适的传输协议。它不使用TCP协议,因为TCP协议需要很多开销,它不适合传输实时数据。在流式传输实现中,一般采用HTTP/TCP来传输控制信息,而用实时传输协议/用户数据报协议RIP/UDP来传输实时数据。当用户使用流媒体技术想要获得自己做需要的信息时,用户和服务器之间就会相互交换信息,使用的协议是HTTP/TCP,那么就会寻找到所需要的数据信息;浏览器使用音视频客户程序,使用HTTP从服务器检索相关参数对音视频客户程序初始化,这些参数可能包括目录、音视频数据的编码类型与 音视频检索相关的服务器地址信息等;音视频客户程序及音视频服务器运行实时流协议,以交换音视频传输所需的控制信息,实时流协议提供执行播放、快进、快倒、暂停及录制等命令的方法;音视频服务器使用RTP/UDP协议将音视频数据传输给音视频客户程序,一旦音视频数据抵达客户端,音视频客户程序即可播放输出。流媒体技术应用最广泛的是在视频点播、远程教育等方面。由流媒体的工作原理了解到,这种下载方式一方面可以缓解网络传输的负担;另一方面可以降低对客户端缓存的要求。并且流媒体可以实现一边下载一边播放的特点,与传统的下载工具先下载、后播放的方式相比,可以大大的缩短用户的等待时间,给用户带来极大的方便。而且,一般传输的文件比较小,因而传输过程中往往比较快速,读取信息也不会浪费大量的时间,可以很容易的获得,这样可以节省不少花费。再者该技术与传统的方式不同,在输送数据过程是不间断的,所以它能够很容易的追踪与用户有关系的信息。这一大功能在教育行业发挥了很大的作用。流媒体与传统的下载工具相比还有一个更显著的优势就是,我们生活中一般的电影和电视都是是单向的,内容也是不变的(电视的内容可以选择)。当人们观看时只能被动的接受,不管是什么节目,不能快进、快退随意选择,这样会使浏览者没有选择权,只能跟随媒体的选择,有时会有一些用户不想看的节目,但是用户又必须观看。而流媒体与传统的媒体技术不同,它的资源要比传统的多,而且是开放性的,内容也很丰富,用户掌握了主动权,可以根据自己的意愿指挥、控制它,让流媒体完全为自己主宰,服务于自身。虽然流媒体技术有很多优点,但是这种技术是在传统下载技术的基础上,新发展起来的媒体技术,所以到目前为止它的标准不一,由此其在发展过程中可以不拘一格,以多种形式发展,从而促使其快速发展,但这也使得流媒体的发展受到障碍。目前,有关方面也意识到这个问题,研究人员正在拟定一个适合流媒体自身发展的标准。所以流媒体的发展在管理、商业运营等方面还存在一些技术问题有待解决。定位Web浏览器Web服务器A/V播放器A/V服务器元文件HTTP/TCPRTSP/TCP流媒体下载技术的工作原理如图2.3所示。图2.3 流媒体下载技术工作原理2.4 多线程下载多线程是Java编程中的一部分,它是实现并发的一种重要手段,一个进程可以通过运行多个线程来并发地执行多项任务。多线程下载指的是:线程通俗的说就相当于是通道,就像水流需要渠道一样,线程是信息传输是所需要的通道。一个线程就相当于传输一个文件所需要的一个通道,同样的意思多线程就是在同时下载多个资源时必须有多个通道,就像水流从不同的渠道流出一样,下载的资源信息也是从不同的通道传输。当有好多个用户同时申请从一台服务器上下载数据的时候,这些用户之间会共享该服务器的带宽,当级别相同的时候,这些用户之间会平均获得下载进程。那么,线程越多,得到的资源就会越多,从而在下载资源的时候,其速度相对也会加快。多线程下载技术的优点在于,它不同于单线程,单线程下载时只能发送一个请求,所以只能下载一个资源。而多线程恰恰相反,它可以同时发送多个请求,每个请求都会下载资源,这样可以大大提高下载的速度,而且能够充分使用主机资源和带宽。基于多线程下载技术的优点,本文通过分析该技术的可行性和设计的总体过程,并实现了该下载技术。在本课程设计中,多线程技术用在新建新任务和下载线程上,在系统中我们可以开始多个下载线程下载同一个网络上的资源而互不干扰。从宏观上看是并行的,但对于微观上来说,它却是并行运行的,线程的运行在操作系统的调度下,各自得到一定的时间片,当某一线程获取到时间片时,它就进入运行状态。各个线程按照一定的协议分别获取时间片。3 相关概念介绍3.1 Java多线程Java语言是Sun公司开发出来的一种面向对象进行设计的编程语言。是一种具有现代性的计算机语言,随着技术的不断更新,Java已被广泛接受并推动了Web的迅速发展。Java的一大目标就是使程序开发者可以交互程序,对一个问题可以分解成多个任务来执行。而多线程可以使编写的程序同时执行多个任务。多线程指的是每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程。进程也可能是整个程序或者是部分程序的动态执行。线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行。也可以把它理解为代码运行的上下文。所以线程基本上是轻量级的进程,它负责在单个程序里执行多任务。通常由操作系统负责多个线程的调度和执行。线程是程序中一个单一的顺序控制流程.在单个程序中同时运行多个线程完成不同的工作,称为多线程.多线程为该程序的基石,通过开启多个线程对资源进行请求和下载,使下载速度得到质的飞跃,也是该项目的关键。线程有两组突出的特点,以下来介绍该组概念:第一,线程的共性和个性。线程的共性。同一个进程中,线程都有共性:多个线程将共享同一个进程虚拟空间。线程共享的环境包括:进程代码段、进程的公有数据(利用这些共享的数据,线程很容易的实现相互之间的通讯)、线程打开的文件描述符、信号的处理器、进程的当前目录和进程用户ID与进程组ID。线程的个性。线程的个性是实现并发性的必要条件。每个线程都有自己的线程ID,这个ID在本进程中是唯一的。一个线程切换到另一个线程上时,必须将原有的线程的寄存器集合的状态保存,以便将来该进程在被重新切换到时能得以恢复。线程必须拥有自己的函数堆栈,使得函数调用可以正常执行,不受其他线程的影响。不同线程应该拥有自己的错误返回码变量。第二,线程的并发性和并行性。线程的并发性。进程内至少同时有两个线程进行时才存在并发性问题。在单处理器上执行的多线程的进程内部,处理器可以在线程之间按照一定策略切换运行,从而实现了同时执行。线程的并行性。至少同时需要有两个线程在执行时才存在并行性。在共享存储多处理器上执行的同一个多线程进程,在同一时刻内,有多条指令在多个处理机上同时执行。3.2 线程的创建和退出及其函数调用1. 线程的创建以下函数是线程的创建函数,要创建新的线程,必须调用该函数。int pthtead_create(pthtead_t *tid, const pthtead_attr_t *attr, void *(*func)(void *),void *arg):第一个参数为指向线程标识符的指针,第二个参数用来设置线程属性,第三个参数是线程运行函数的起始地址,最后一个参数是运行函数的参数。2.线程的退出(1)等待线程的结束函数:int pthread_join(pthread_ttid,void*status):第一个参数为被等待的线程标识符,第二个参数为一个用户定义的指针,它可以用来存储被等待线程的返回值。(2)终止线程函数:void pthread_exit(void*value_ptr):唯一的参数是函数的返回代码。3.3 HTTP协议HTTP协议即超文本传输协议,是面向事务的应用层协议,使用TCP连接进行可靠传输,它是万维网能够可靠交换文件(如文本、声音、图像等)的重要基础。浏览器和服务器之间想要通信时,每个网点都有一个服务器进程,用以监听TCP端口80。一旦浏览器发出建立连接请求,如果服务器监听到该请求,就建立了TCP连接,浏览器就像服务器发出请求,服务器就会返回所请求的信息作为响应。最后,将TCP连接释放。在整个过程当中,所遵循的规则就是HTTP协议。它使用了面向连接的TCP作为传输曾协议,能够保证数据的可靠传输。但是要说明的是,在客户端浏览器和服务器建立连接时不一定必须使用TCP三次握手来实现,HTTP只是假定它的传输层协议是可靠的,因此HTTP协议的下层协议只要是可靠的传输协议都可以被HTTP协议使用。虽然这种完成一次便断开连接的形式,看起来增加了下次通信连接的网络开销,但是,站在服务器的角度来看,这种方式可以减少服务器的持续连接的开销,当有多个客户端连接该服务器时,这种保持连接的消耗会变得非常巨大,以至于服务器不能再接收更多客户端的连接,减少了服务器的利用率。3.4 URL和HTTP URLURL即统一资源定位符,是表示从Internet上得到的资源位置和访问这些资源的方法。它给资源(如文件、图像、视频等)的位置提供了一种抽象的识别方法,这样就可以给资源定位,通过这种定位,系统就可以对它们实施一些操作,如查找。存储等。URL一般由四部分组成,它的表示方法是::/:/因为万维网的访问要使用HTTP协议,那么能够标识这个地址的唯一东西就是HTTP的URL。此时的表示方法就是:HTTP:/ :/例如当访问太原理工大学的网页时,其URL就是: 4 多线程下载工具需求分析4.1 用户需求分析信息化时代的今天,网络成为人们生活、工作的必须品,人们获取资料的方式也是通过网络来得到。人们对网络需求增加的同时,对其要求也逐渐严格。他们都希望以最快的速度获取信息,甚至不想多等一分钟,有的人可能想着只要轻触键盘就能获得所需要的信息。例如,人们在网上希望找到自己想要下载的视频、音乐等。人们现在不单是使用浏览器关注网页上的东西,很多人们喜欢用一些软件下载自己想要的资料,而且对下载工具的速度和安全性要求越来越高。而多线程下载技术能够在同一时间运行多个线程,也就是说它可以同时下载多个资源,通俗的说就是可以将一个下载工作划分为几个小任务共同完成,这样可以在很大程度上提高资源的下载效率。传统的下载工具很难解决这样一个问题,就是如果下载的文件较大,或者所需的时间较长时,那么此时对计算机和网络的要求就很高。也就是在此过程中,计算机不能出任何问题,否则下载就会失败。例如:有时计算机会断电、或者断网、或者造成死机、蓝屏等,这时必须重启计算机。那么,要是传统下载工具的话,之前下载的东西就会丢失,还要重新开始下载,这就会浪费用户大量的时间。而多线程下载,有一个功能就是断点续传,意思是当有意外终止下载时,下载任务不会因此丢失,开始重新下载时,计算机会从停止的位置继续下载,这样可以减少不必要的麻烦,节省了大量的时间,所以多线程下载受到很多用户的喜爱。见下表1所示,整合了该系统的需求分析表。表4.1 多线程下载需求分析表序号功能名称功能描述1多线程一个下载任务同时由多个线程同时下载2支持HTTP协议能够下载HTTP类型的资源数据3断点续传当断电或关闭下载任务后,下次能够继续下载4图形界面输入URL地址,保存地址和文件名,线程数4.2 可行性分析 可行性分析的目的就是对所作的系统进行分析,确定该系统是否可行。就是开发人员尽可能用较小的人力、物力、财力达到所期望的目的。其中基本的可行性分析包括技术可行性、经济可行性和社会可行性。下边分别从这三方面探讨多线程下载技术实现的可行性。4.2.1 技术可行性 多线程是Java语言的中很重要的一部分知识,而Java语言是目前使用最多的语言之一。多线程是实现并发的一种主要手段。在Java现有语言的基础上,完全可以实现多线程下载这一任务。在开发过程中,其技术方案是:开发工具:Eclipse+JDK开发环境:windows运行环境:windows4.2.2 经济可行性经济可行性分析要估计项目的效益和成本,分析项目经济上是否合理和可行,能够在最低成本的情况下,开发出最大价值的软件。经济可行性解决的最重要的两大问题是资金可得性和经济合理性。而多线程下载技术的开发,在很大程度上可以为用户带来便捷,能够提高下载速度。而该下载程序的开发也不会消耗太多的资源,所以在这方面该软件完全符合。4.2.3 操作可行性该下载程序设计好后,对用户的计算机能力要求不高,只需要会计算机的基本操作即可。而且,程序设计的界面友好、操作非常简单,用户不用花费太多的时间去学习,所以很容易被用户接受。所以,从操作可行性来看,该下载工具也是相当可行的。4.3 业务流分析多线程下载工具的业务流程是:用户需要下载信息时,首先需要登录下载系统,然后在新建的任务列表中填写与下载资源有,关的下载信息,例如:资源的URL地址,资源的存储路径,以及下载任务所需的线程数等。填写好信息时,软件会自动发送HTTP协议请求,服务器收到下载请求后,会返回相应的相应消息。服务器确定下载消息的信息无误后,就会启动线程。从而将缓存中存储的数据最终存储到目的存储路径。除此之外,系统还可以完成一些基本操作,如:停止、继续、删除任务等。以便用户在下载资源时随时掌控。5 多线程下载工具的设计5.1 整体设计随着计算机的发展,人们获取资源的途径逐渐转移到计算机,大部分人们都喜欢从网上寻找想要的信息。而且,人们对资源需求加大的同时,对下载的需求也增大。人们往往喜欢一次性把资源加入下载列表,这样下载是花费的时间也不断增加,用户的需求不断充斥着下载工具的下载效率和速度。而多线程下载技术,恰恰能够有效的提高下载的速度。因为多线程下载技术最大的优点就是能够充分地利用调制解调器的数据传输能力,从而达到在最短的时间内将一个软件下载过来的目的。笔者就是通过对比分析传统的下载技术和多线程下载技术,分析多线程下载的特点,并研究和实现了Java多线程下载的开发。5.2 模块划分本系统可以划分为以下3大模块:1.下载任务模块对下载任务的url资源进行定位,并开启线程将资源输出流写入到本地计算机下载文档中对应文件的固定位置。2.线程启动模块对下载任务线程进行配置与启动,相当于整个系统的总装模块,从用户界面取得url参数,并对下载线程配置并启动。3用户界面模块给用户可视化的界面进行操作,使下载工具有一个较高的易用性,通过界面,用户将url路径传递给程序,完成下载任务。用户界面包含的内容有:菜单栏、工具栏和下载信息栏。其界面亲和力强,用户易于操作,用户容易掌握。用户界面的功能图见图5.1所示。用户界面按钮工具条添加下载任务主窗口属性面板图5.1 用户界面功能图用户在下载资源时,可以将任务分为以下几部分:开始时,要新建下载任务,开始下载任务,中途可以暂停下载任务,删除下载任务,打开文件目录,获取下载源文件消息,判断获取的URL地址是否是有效的等功能。5.3 数据下载流程用户调度多线程下载全部线程运行是否生成下载文件结束图5.2 多线程下载数据流程图见图5.2所示,描述了该下载工具的整个数据流程。用户想要下载资料时,先要进入用户下载界面,新建一个任务栏,然后将与所下载资料的信息填入任务栏,例如URL地址。然后下载工具的进程会想服务器发送HTTP报文请求,服务器收到请求后,会同时返回响应报文。如果用户填入的地址是正确的,服务器确认后,就会启动线程,下载资源。如果是不合法地址,下载将无法正常进行,用户需要核对地址,输入合法的URL。下载好的资源就会存储到事先建立的文件夹。当整个过程完成后,下载就结束了。5.4 关键技术1HttpURLConnection HttpURLConnect类通过http协议发送请求道服务器,并取得服务器返回的response。URLConnection是个抽象类,它有两个直接子类分别是HttpURLConnection和JarURLConnection。每个 HttpURLConnection 实例生成单个请求,请求后在 HttpURLConnection 的 输入或输出上调用 close() 方法可以释放网络资源,但如果在调用 disconnect()则可能关闭base套接字。本程序通过HttpURLConnection可通过setRequestProperty(Range,startps ,endpas)可以从不同位置对web资源进行请求的特点,将资源分拆,并通过多线程技术,每个线程对资源的一部分进行下载,实习多线程下载。2.RandomAccessFile RandomAccessFile用来访问文件,用seek( )方法来访问文件位置,并进行读写。这些记录的大小不必相同;但是其大小和位置必须是可知的。但是该类仅限于操作文件。 RandomAccessFile不属于InputStream和OutputStream类系的,不使用InputStream和OutputStream类中的方法;是一个完全独立的类,所有方法从零开始写。总而言之,它是一个直接继承于Object的类。 RandomAccessFile的工作方式是把DataInputStream和DataOutputStream相结合,然后使用自己的方法,它不支持只写文件。本程序利用其特性,将由HttpURLConnection的每一个线程所下载的资源作为一个文件的一部分,最终,当下载完成后,可以完好的保持资源的完整性。5.5 基本操作基本操作是在程序中频繁使用的一些操作,这些操作可能会被执行几十甚至几百次,当这些操作被调用的时候,为了方便先做简要说明。下载管理的主要操作有以下几方面:1. Socket操作(1) 创建一个Socket套接字;(2) 绑定一个Socket套接字;(3) 打开一个Socket套接字;(4) 关闭一个Socket套接字;(5) 通过Socket套接字发送数据;(6) 从Socket接收数据。2HTTP连接(1) 创建一个HTTP连接;(2) 打开一个HTTP连接;(3) 关闭一个HTTP连接;(4) 发送一个HTTP请求;(5) 接受一个HTTP应答。3存储远程文件到本地设备(1) 创建文件;(2) 打开文件;(3) 关闭文件;(4) 管理多线程的同步请求。4下载管理(1) 管理多线程的并行下载;(2) 持续跟踪下载处理中的每个线程。6 多线程下载工具的实现6.1 下载任务模块 1通过继承Thread实现线程,实现构造函数来初始化下载所需信息public class downthread extends Threadpublic URL url;public HttpURLConnection urlt;public JLabel Jlabel;public long startps;public long endpas;public File file;public long time;public long tim1;public long tim2;public downthread(URL url,long startps,long endpas,File file,JLabel label)this.url=url;this.startps=startps;this.endpas=endpas;this.file=file;this.Jlabel=label;2重写run()函数,实现对url资源的定位并取得输入流public void run()tryurlt=(HttpURLConnection)url.openCo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论