Java线程池技术在多媒体网络教室中应用与实现.docVIP

Java线程池技术在多媒体网络教室中应用与实现.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Java线程池技术在多媒体网络教室中应用与实现

Java线程池技术在多媒体网络教室中应用与实现   摘#8195;要多媒体网络教室已普遍应用于各学校、培训机构的机房教学环境中。在此系统的服务器端,需同时响应多个客户端的请求。本文从此系统使用的多线程技术存在的问题出发,设计应用线程池技术,并给出具体的Java技术实现。   关键词多线程;线程池;Java技术;多媒体网络教室   中图分类号TP文献标识码A文章编号1673-9671-(2011)081-0188-01      多媒体网络教室,是极普通的计算机机房、语音室、视听室、多媒体演示室等功能于一体,利用现代网络技术和多媒体技术将若干台多媒体计算机及相关的网络设备互联而成的一种网络教学系统。多媒体网络教室已普遍应用于各学校、培训机构的机房教学环境中。作为多媒体网络教室系统的服务器端――教师机端,需要同时响应多个客户端的请求,比如:登录连接、文件传送、屏幕监视等。必然,服务器端必须使用多线程技术进行设计开发。   1多线程程序存在的问题   C/S架构的网络程序,服务器端要同时响应多个客户端的请求,为了提高性能,一般都通过多线程的方式进行实现。线程不是没有自己的开销的。启动一个线程和线程销毁时将其清除,这会消耗虚拟机的大量工作,尤其是生成几百个线程的程序。即使线程能很快结束,这也会加重垃圾回收或其他部分VM的负担而影响性能。同时线程之间的切换也有开销。最后,虽然线程有助于更有效地利用计算机有限的CPU资源,但系统所能提供的资源毕竟是有限的。一旦生成足够多的线程,并使用了计算机所有可用的空闲时间,那么再生成更多的线程只会将CPU资源和内存浪费在线程管理上,反而降低系统的性能。   2线程池   线程从创建→启动← →阻塞→消亡,线程一旦停止就不能重启,线程生命周期就算结束。如何使一线程不会在结束一项任务后马上停止,能够重新利用?改造线程,通过重用线程可获得两全其美的效果。把所有需要完成的任务放在队列或其他数据结构中,让每个线程在完成前面的任务后,再从队列中获取新的任务。这样,这些线程在“池”中重复使用,称为线程池,保存任务的数据结构称为任务池(Pool)。   3线程池的实现   1)方法一:第一次创建线程池时分配固定数量的线程。当任务池为空时,每个线程都在线程池中等待。当向任务池中添加一项任务时,所有等待的线程都得到通知。当一个线程结束其分配的任务时,它再回到任务池中获得新的任务。如果没有得到,它就等待,直到新的任务添加到任务池中为止。   2)方法二:将线程本身放在池中,让主程序从池中取出线程,为其分配任务。如果必须完成一项任务,而池中没有线程时,主程序就生成一个新的线程。每个线程结束后都会返回到池中。   4线程池的使用   以下选择多媒体网络教室中“作业分发”模块来介绍线程池的使用。“作业分发”模块要向所有学生发送作业文件,出于文件传输的正确性考虑,使用面向连接的TCP方式进行传输,这样,教师机端就要同时处理多个用户的连接请求。   4.1使用线程池   创建Vector对象pool,保存任务列表,当池为空时,threads中的每个线程都处于等待状态,当向池添加一项任务时(向指定学生机发送文件),所有等待的线程都得到通知。当一个线程结束其分配的任务时,它再回到池中,以便获取新的任务。如果没有得到,它就等待,直到新的任务添加到池中为止。   4.1.1创建线程池   本处使用方法一,使用线程同步的Vector类创建线程池。代码如下:   Vectorpool = new Vector( );   //创建固定数量的线程   FileTranThread[ ]threads = new FileTranThread[ THREAD_COUNT] ;   for(int i=0;ithreads.length;i++){    threads[i] = new FileTranThread(pool);   threads[i].start();   }   4.1.2添加任务到池中   tranList中保存要发送文件的目标学生机的列表,若此列表不为空,表示还有目标学生机未收到文件,需从线程池中取出一个线程进行发送。调用线程池中的线程时,要向其传送参数:目标客户机对象,要传送的文件,要保存到目标机器的指定目录。此三个参数封装到TranTask对象中。代码如下:   While(!tranList.isEmpty()){    totalClients++; //要发送文件的目标客户机数,其初值为0    synchronized(pool){    ClientObject client = (ClientObject) tranList.remove(tr

文档评论(0)

317960162 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档