《java多线程与线程安全实践基于ttp协议的断点续传—毕业设计论文》由会员分享,可在线阅读,更多相关《java多线程与线程安全实践基于ttp协议的断点续传—毕业设计论文(34页珍藏版)》请在金锄头文库上搜索。
1、毕毕 业业 设设 计计( 论论 文文) JavaJava 多线程与线程安全实践多线程与线程安全实践 基于基于 HttpHttp 协议的断点续传协议的断点续传 论论文作者姓名:文作者姓名: 申申请请学位学位专业专业: : 申申请请学位学位类别类别: : 指指导导教教师师姓姓名名( (职职称称) ): : 论论文提交日期:文提交日期: JavaJava 多线程与线程安全实践多线程与线程安全实践 基于基于 HttpHttp 协议的断点续传协议的断点续传 摘摘 要要 现实世界中的很多过程都具有多条线索同时动作的特性。Java 语言的一大 特性就是内置对多线程的支持。多线程是指同时存在几个执行体,按几条
2、不同 的执行线索共同工作的情况,它使得编程人员可以很方便地开发出具有多线程 功能、能同时处理多个任务的功能强大的应用程序。一些同时运行的线程需要 共享数据,因此每个线程就必须要考虑其它与它一起共享数据的线程的状态与 行为,这就是线程安全的问题。为了对 Java 多线程与线程安全机制进行研究与 实践,特此设计一个基于 Http 协议的支持多线程断点续传的下载程序。此下载 程序由下载任务模块、设置模块以及系统帮助模块组成。通过 Apache Jakarta Commons 下的子项目 HttpClient 包对 Http 协议进行支持,从而下载服务器端的 资源。程序提供多线程断点续传功能,在完成下
3、载过程中使用多线程技术可以 较大幅度地提高下载的速度。 关键词关键词:多线程;线程安全;断点续传 The Practice of Java Multithreading and Thread Security- Download Tool with Broken/Resume Function based on http Abstract In real world, many processes have the characteristic that multi-strip clue act at the same time. The Java language has a major c
4、haracteristic of embedded multithread support. Multithreading is the status that exist several implementation body at the same time, according to several different clues to the implementation of the joint work, It means that programmers can easily produce more threads development functions, It can a
5、lso deal with a number of tasks powerful application. Running some of the threads need to share data, So each thread must consider other with it to share the data with the state of the thread, This is the thread safety. To Java multithreading and security mechanisms to conduct research and practice,
6、 Design hereby Http agreement on the support multithreading download procedures. This download procedures comprises of downloading task module, setting module and helping system module. With Http support of HttpClient, a subproject of Apache Jakarta Commons, it can download resources coming from web
7、 server. The procedure provides the Multi- threaded broken/resume functionality, in the process of completes downloading to use the multi-thread technology can greatly boost download speed. Keywords: Multithreading; Thread security; Broken/Resume 目目 录录 论文总页数:25 页 1 引言1 1.1 课题的研究背景与意义.1 1.1.1 课题的研究背景
8、1 1.1.2 课题的研究意义1 1. 可行性分析.2 1.2.1 技术可行性2 1.2.2 操作可行性2 2 相关基础知识以及开发平台.2 2.1 JAVA 中的多线程与线程安全 3 2.1.1 Java 中的多线程.3 2.1.2 Java 中的线程安全.3 2.2 Http 协议简介4 2.3 断点续传原理.4 3 需求分析5 3.1 用户需求分析5 3.2 业务流分析.6 4. 系统设计.7 4.1 系统设计要点.7 4.2 系统总体功能结构.7 5.系统实现.8 5.1 用户界面实现8 5.2 下载任务实现.11 5.2.1 下载任务类图11 5.2.2 下载任务顺序图12 5.2.
9、3 下载任务具体实现13 5.3 监控下载信息设计.18 5.3.1 监控下载信息类图18 5.3.2 监控下载信息顺序图19 5.3.3 监控下载信息实现19 结 论22 参考文献23 致 谢24 声 明25 第 1 页 共 25 页 1 1 引言引言 1.11.1 课题的研究背景课题的研究背景与意义与意义 1.1.11.1.1 课题的研究背景课题的研究背景 以往我们开发的程序大多是单线程的,即一个程序只有一条从头至尾的执 行线索。然而现实世界中的很多过程都具有多条线索同时动作的特性。例如, 我们可以一边看电视,一边活动胳膊,如果不容许这样做,我们会感觉很难受。 再如一个网络服务器可能需要同
10、时处理多个客户机的请求等。 Java 语言的一大特性就是内置对多线程的支持。多线程是指同时存在几个 执行体,按几条不同的执行线索共同工作的情况,它使得编程人员可以很方便 地开发出具有多线程功能、能同时处理多个任务的功能强大的应用程序。虽然 执行线程给人一种几个事件同时发生的感觉,但这只是一种错觉,因为我们的 计算机在任何给定的时刻只能执行那些线程中的一个。为了建立这些线程正在 同步执行的感觉。Java 快速地把控制从一个线程切换到另一个线程。 多个线程的执行是并发的,也就是在逻辑上“同时”,而不管是否是物理上 的“同时”。如果系统只有一个 CPU,那么真正的“同时”是不可能的,但是由于 CPU
11、 的速度非常快,用户感觉不到其中的区别,因此我们也不用关心它,只需 要设想各个线程是同时执行即可。 自从“多线程下载”技术发明以来,这项技术得到前所未有的关注已是不 争的事实。在“网络蚂蚁”软件流行开后,许多下载软件也都纷纷效仿,是否 具有“多线程下载”技术、甚至能支持多少个下载线程都成了人们评测下载软 件的要素。 “多线程下载”的基础是 WEB 服务器支持远程的随机读取,也即支 持“断点续传” 。这样,在下载时可以把文件分成若干部分,每一部分创建一个 下载线程进行下载。 1.1.21.1.2课题的研究意义课题的研究意义 多线程和传统的单线程在程序设计上最大的区别在于,由于各个线程的控 制流彼
12、此独立,使得各个线程之间的代码是乱序执行,由此带来的线程调度问 题。由于是多线程进行断点续传,还要考虑记录多个断点位置,且记录断点位 置时也要考虑同步互斥等问题。所有这些都使得这一步比较复杂。但是可以明 显提高网络文件的下载速度。 现在,不要说编写专门的下载软件,在自己编写的软件中,加入下载功能 有时也非常必要。如让自己的软件支持自动在线升级,或者在软件中自动下载 新的数据进行数据更新,这都是很有用、而且很实用的功能。 第 2 页 共 25 页 1.1. 可行性分析可行性分析 可行性研究的目的,就是用最小的代价在尽可能短的时间内确定问题是否 能够解决。要达到这个目的,必须分析几种主要的可能解法
13、的利弊,从而判断 原定的系统规模和目标是否现实,系统完成后所能带来的效益是否大到值得投 资开发这个系统的程度。因此,可行性研究实质上是要进行一次大大压缩简化 了的系统分析和设计的过程,也就是在较高层次上以较抽象的方式进行的系统 分析和设计的过程。 系统的可行性分析主要包括技术上的可行性和操作上的可行性。本系统的 可行性分析如下: 1.2.11.2.1 技术可行性技术可行性 下载程序功能模块的实现主要利用了面向对象的 Java 高级编程语言。使用 Java 作为开发工具主要是因为 Java 是目前比较流行而且非常成功的编程语言。 多线程编程技术是 Java 语言的重要特点。多线程编程的含义是将程
14、序任务 分成几个并行的子任务。特别是在网络编程中,有很多功能是可以并发执行的。 Java 中实现多线程的类有两种方法:1.扩展 java.lang.Thread 类,用它覆盖 Thread 类的 run 方法。2.生成实现 java.lang.Runnable 接口的类并将其它的实例 与 java.lang.Thread 实例相关联。 Thread 类是负责向其它类提供线程支持的最主要的类,要使用一个类具有 线程功能,在 Java 中只要简单地从 Thread 类派生一个子类就可以了。扩展 Thread 类,如 printThread.java。 由于同一进程的多个线程共享同一片存储空间,在带
15、来方便的同时,也带 来了访问冲突这个严重的问题。Java 语言提供了专门机制以解决这种冲突,有 效避免了同一个数据对象被多个线程同时访问。 由于我们可以通过 private 关键字来保证数据对象只能被方法访问,所以 我们只需针对方法提出一套机制,这套机制就是 synchronized 关键字,它包括 两种用法:synchronized 方法和 synchronized 块。 本系统使用 Eclipse 的 SWT 图形界面技术进行开发,以 HttpClient 包进行 支持,上述两个软件或是开发包均为免费下载,十分方便。 1.2.21.2.2 操作可行性操作可行性 下载程序的具备友好的用户界面
16、,而且操作简单易于被用户接收,使用此 下载程序十分方便,因为软件的操作思路比较清晰,而且用户实际操作的内容 较少,所以用户只需要熟练操作计算机即可。因此从使用操作方面看,此系统 得开发是可行的。 第 3 页 共 25 页 2 2 相关基础知识以及开发平台相关基础知识以及开发平台 2.12.1 JAVAJAVA 中的多线程与线程安全中的多线程与线程安全 2.1.12.1.1 JavaJava 中的多线程中的多线程 Java 不仅是一门语言,它已成为一门技术,例如 Java 芯片技术、Java 编 译技术、基于 Java 的信息家电联网技术(Jini)等,并以它的平台独立性、健 壮性、Java 虚拟机技术等特点受到广大编程者青睐。Java 能把所有东西从桌面 计算机平稳地转换成基于网络的计算,它是 Web 浏览器中必须具备的技术,是 一个完全面向对象的语言,是有利于处理网络协议的程序综合库。线程是从一 个完整应用程序分出的单独的处理步骤,是程序内部的一个顺序控制流。一个 小程序中可含 1 个或多个线程并可同时运行,由于单线程一旦运行就独占线程 的所