计算机Java多线程下载技术分析

2018-03-04 07:03张春黎
电脑知识与技术 2018年36期
关键词:线程

张春黎

摘要:作为应用率较高的下载方案,多线程下载技术将多线程优点充分发挥了出来,利用多线程基于相同时间下的下载请求,分割处理下载数据,各线程对应相应的下载内容,最后共同组成数据文件,由此可使下载效率得到显著的提升。多线程下载技术在多个下载器中有着广泛的运用,包括QQ旋风、迅雷等。该研究针对计算机Java多线程下载技术进行了分析,并开展实例分析,借助Runnable接口,对乌龟和兔子赛跑的过程、结局开展模拟研究。

关键词:Java;线程;多线程技术;线程同步

中图分类号:TP393      文献标识码:A      文章编号:1009-3044(2018)36-0016-02

当前计算机网络成为人们获取资源的重要途径,在取得资源的过程中,运用的关键方式就是下载。可以将下载通道看作是线程,而多线程对应的是将多数下载通道都打开。服务器拥有下载的功能,用户在共享宽带环境下,基于优先级状况,能够平均化地对下载线程进行分配处理。下载速度会随着线程的增多而提高,二者呈正相关的关系。多线程下载技术在当下众多下载软件中都可以运行。

1 网络下载技术及基本构架

当前在网络覆盖面积逐步扩大的过程中,使用者的数量明显增多,大量使用者的访问操作都需要由Wed服务器做出响应,所以导致网络下载技术的发展收到了来自Wed服务器性能的限制。对此,PZP 技术凭借非中心化、负载相对均衡化及资源分散化的特征能够于共享文件方面得到广泛运用,可以基于客户机结点对共享文件进行保存,在缺少中央服务器的情况下,使用者间能够对文件进行传送、共享。借助带宽(参与节点),PZP技术凭借合作下载及多数结点彼此传输数据的途径,能够使容量较大的文件传输率得到显著改善,其中就涵盖e Mule、e Donke及Bit T0rrent等[1]。

P2P、C/S是网络下载主要框架类型,HTTP下的TP下载建立在C/S架构的基础上,多线程下载途径形成于客户端;但是多源文件传输途径以P2P网络结构为基础,形成了e Mule和BT。C/S框架涵盖了HTTP/FTP下载途径,该模式下的服务器存储了大量的共享文件,使用者在需要时需要机遇服务器对文件开展搜索、下载及共享等操作,因此可以将服务器看作是数据信息的中转站,客户端所开展的下载、上传等操作都需要经过这一环节。P2P是BT协议的基础结构,借助相应节点资源,Peerto Pee能够对自组织网络进行构建,因为网络结点彼此存在对等的关系,因此具备服务、被服务两大功能,无须途径服务器,就能够对文件进行传送。

2 可行性分析

2.1 技术可行性

计算机Java语言的关键特点即为多线程技术,借助对多线程程序进行编写的方式,能够允许计算机于同时对各项任务进行高效化的处理。利用特定语言能够编写出静态代码—程序,其本质上是计算机指令的组合结果。动态化的执行程序也叫作进程,涵盖加载代码、执行代码和结束三个环节,进程也经历了形成-发展-灭亡。进程的下一级执行单位即为线程,其作为进程下的独立顺序控制流。各Java程序均包括主线程(缺省),作为Java应用程序,main()方法执行的主要线索就是主线程;而作为Applet程序,控制浏览器对JavaApplet程序进行执行、记载操作的关键线索就是主线程。多线程在实现的过程中,需要基于主线程对线程对象进行构建。死亡、新建、运行、就绪及堵塞是所有线程所具有的状态形式。

对于下载程序功能模块,借助计算机Java 高级编程语言能够发挥其功能,该编程语言有着多方面的优势,已经被作为关键开发工具,有着广泛的应用。Java语言的显著特征即为多线程编程技术[2]。就多线程编程的概念来看,其能够针对程序任务进行划分,形成多项并行子任务。进行网络编程时,能够并发开展多项功能。

计算机Java下的多线程类的具体实现途径如下:

1) 对java.lang.Thread的类进行拓展,并对Thread类下run方式进行覆盖;

2) 对java.lang.Runnable接口的类的实现进行生成,使java.lang.Thread和Runnable二者的实例彼此关联。对于类的线程支持,关键由Thread 类来供应,类在获取线程功能的过程中,应基于计算机Java下,使Thread 类对子类进行派生。在对包括printThread.java的Thread 类进行扩展时,因为相同进程下很多线程对存储空间进行了共享,这样虽然具有一定的便利性,但是也由此产生了访问冲突的弊端[3]。而针对这类问题,计算机Java语言所具有的机制能够有效对访问冲突问题进行处理,不会出现多个线程在相同的时间都访问相同数据的状况。若想确保仅借助特定途径才能对数据对象进行访问,就需要发挥private关键词的作用,这就要研制出该途径相对应的机制,其在synchronized关键词方面,涵盖了synchronized块、synchronized方式。本研究在研发过程中运用的是 Eclipse下SWT图形界面技术,同时也涉及了HttpClient包。

3 java下的多线程

3.1 创建、启动线程

第一种为在Runnable接口实现过程中,对线程类进行定义:

Runnable 接口类型为Thread myThread = new Thread(target)//target

Runnable下的途径仅为:

public void run();能够对线程运行体进行定义

第二种是对Thread子类进行定义,也对run方式進行重写:

clasMyThread extends Thread{public void run(){}}

线程类在对新线程进行启动的过程中,需要对Thread下start()方式进行执行,若认为调用方式涵盖了run()方法的调用,则不能对新线程进行启动,这就需要在对线程进行创建的过程中首选第一种方式,其接口相对灵活化。

3.2 转换线程状态

对线程 start()方式进行调用后,线程处于就绪形态,时间片由Cpu进行分配,则线程处于运行形态,那么时间片会结束,若没执行结束run()方法,线程就会阻塞。

3.3 sleep方法

Thread静态方法为:

public static void sleep(long millis)throws InterruptedException

需要及时捕捉出现的异常状况:

Thread.currentThread();//获取当下的线程

4 加速文件加载

4.1文件加载算法流程

因为宽带的制约影响,基于客户端所开展的下载操作,对于客户端发出的请求,由tp=q(ts+tι)服务器端做出的响应,二者均可归属为串行操作,在实现过程中就需要发挥计算机java技术下加锁方式的作用。在加载文件时,子线程形成解锁和重复加锁处理。通常独立线程在对文件进行下载时,会遇到很多解锁的状况,所以q的大小和fk(锁粒度)都同Sp(n)(加速比)存在很大的联系。文件加载算法流程详见图1所示:

4.2 多线程加载文件算法

上述公式中,锁外消耗时长表示为[tp],其占比重表示为q;解及加锁消耗时长表示为[ tι],锁内消耗时长表示为[ts]。当q是整数的情况下,意为首次申请才会形成锁竞争,若q是小数,那么会重复形成锁竞争。运算并行下载时间的运算公式如下:

上述公式中的文件块数目表示为N,线程数目表示为h,[nh]的比值表示为k,机器处理核数表示为p,锁粒度表示为fk,[fk=tsti]。

结合公式得知:1)若[n]、[q]和[fk]均恒定时,因为q等于p,min/线程数及min/处理核数;2)若[fk]恒定时,,因为q等于p,要借助移动终端多核处理器,开展并行处理操作;3)参考h、q二者的联系,包括下述不同状况:首先为[q ≤ h-1],同q、n及[fk]都存在联系,条件吻合时得到最小[ tn];其次为[q>h-1],同h呈正比,因此不存在最小[tn]。

5 线程之间的同步

对相同变量进行访问的过程中,对线程进行并行执行时,若线程A赋值变量X的过程中,线程B应对该变量数值进行读取,线程A没有赋值变量X时,B无法对数值进行读取,怎样解决这样的问题?由此针对访问变量X的方式,需要借助 synchronized 关键词进行一定的修饰。该方式一旦被线程A所调用,其余线程就要经历等待的过程,线程A结束之后即可运用[5]。同步方式就是借助synchronized进行说明,在设计多线程程序中有着广泛的应用,能够确保单个线程在相同时间对方法进行访问,将线程间的同步变为了现实。协商、共享不同资源的关键就在于同步。

6 程序示例

6.1 实现过程

在对龟兔赛跑过程进行实现时,借助就是计算机JAVA,而多线程的实现就运用的是Runnable接口,单个类对Runnable接口进行实现的过程中,基于该类针对Runnable接口实现的run( ) 方式,并不能将类视作线程类。对线程进行启动时,无法借助类的实例对start ( ) 方式进行直接的调用,应利用Thread类对方法进行构建。在Thread(Runnable target)完成对象构建的任务后,对Thread对象下start()方法进行调用,由此能够对多线程代码进行运行。

6.2 运行结果

结合龟、兔赛跑的过程,赛跑结束对于乌龟来说需要耗费30S;而兔子在前2400M时耗时8S,而休息时长为12S,21S后继续赛跑,4800M于28S结束,继续休息。兔子在休息过程中乌龟已经结束赛跑。运行结果详见表1所示:

乌龟、兔子的同时比赛借助多线程变为了现实。实践生活所出现的多线程状况也比较常见,包括:很多飞机或火车售票口在相同时间卖票,各窗口表示独立线程。对于此,存在不同线程对相同资源进行竞争的问题,代表不同的窗口存在对相同票进行售卖的可能性。所以在处理过程中,就需要运用多线程同步的技术。

7 结束语

结合Http协议,借助Java多线程技术可以对多线程断点续传程序进行编写。系统帮助模块、设置管理模块、任务管理模块及下载分类管理模块共同组成了系统框架。子项目Http Client 包存在于Apache Jakarta Commons中,允许运行Http协议,可以对服务器端资源进行下载操作。多线程断点续传是该程序的关键作用,发挥多线程技术的作用,能够使下载速率得到明显的改善。

参考文献:

[1] 刘引涛.  基于Java的多线程下载工具研究与实现[J]. 现代电子技术,2012(08):11-14.

[2] 耿永利.  基于Java的网络管理系统开发与管理[J]. 漯河职业技术学院学报,2015(02):34-35.

[3] 姚斌.  基于JAVA的多線程下载器的设计[J]. 信息与电脑:理论版,2014(07):28-29.

[通联编辑:光文玲]

猜你喜欢
线程
基于国产化环境的线程池模型研究与实现
浅谈linux多线程协作
线程池技术在B/S网络管理软件架构中的应用
基于上下文定界的Fork/Join并行性的并发程序可达性分析*
Linux线程实现技术研究
么移动中间件线程池并发机制优化改进