基于Java多线程的演示程序设计.doc_第1页
基于Java多线程的演示程序设计.doc_第2页
基于Java多线程的演示程序设计.doc_第3页
基于Java多线程的演示程序设计.doc_第4页
基于Java多线程的演示程序设计.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

基于Java多线程的演示程序设计2007年第10期汁算机与现代化JISUANJIYUXlANDAIHUA总第146期文章编号:1006.2475(2007)10-0077-03基于Java多线程的演示程序设计刘洪,郑建翔,梁旗军(南昌航空工业学院,江西南昌330063)摘要:介绍了用Java多线程开发的一个操作系统演示程序,该程序动态演示操作系统中多线程的调度过程.学生通过该演示程序更直观地了解线程的调度原理,加深对线程概念的理解.关键词:多线程演示程序;Runnable接口中图分类号:T|,3Il文献标识码:ADemoDevelopedbyJavaMultipleThreadsuuHong,ZHENGJianxiang.LIANGQijun(NanehangInstituteofAeronauticalTechnology,Nanehang330063,China)Abstract:ThispaperintroducesademoofoperatingsystemdevelopedbyJavaMultipleThreads.Itcalldynamicallydemonstratethescheduleprocessesofmultiplethreadsintheoperatingsystem,whichmaymakestudentsknowthethreadscheduleprincipleintuitivelyandgivethemadeepimpressiononthread.Keywords:multiplethread;demo;RunnableinterfaceO引言.多线程在计算机操作系统的学习中概念抽象,难教难学,比较好的教学方法就是有一个直观的多线程CAI教程.但至今为止,在众多眼花缭乱的计算机CAI教程中关于多线程演示的少之甚少,且大多是以显示结果的形式出现.基于这种情况,怎样才能给学习者以直观的概念.计他们更深刻地了解多线程是本文的研究目的,线程也称为轻质进程,是进程内的一个相对独立的执行流Java提供的多线程功能使得在一个程序里可同刚执行多个小任务,多线程带来的好处是更好的交互性能和实时控制性能.1线程状态的转换线程从创建到执行完毕的过程称为线程的生命周期.在整个生命周期中,线程总是处于图l所示的几种状态中的某一种状态.(1)新建状态一就绪状态.图1线程状态转换图一个新创建的线程(使用new+Thread构造方法创建的对象)不会自动运行,此时处于新建(New)状态.当调用线程的start()方法时,该线程进入就绪(Ready)状态.(2)就绪状态运行状态.Java运行时系统提供线程调度器按照一定的规则进行调度,本文提到了FIFO和优先级调度,一旦某个线程获得执行机会,则立即进入运行(Running)状态,开始执行线程体代码.(3)执行状态阻塞状态.处于执行状态的线程可能因某种事件的发生而收稿日期:20061010作者简介:刘洪(1962.),男,江西南昌人.南昌航空工业学院计算机学院副教授,硕士,研究方向:计算机控制,操作系统;郑建翔(1971.),女,汀西高安人.讲师.硕士,研究方向:嵌入式系统;梁旗军(1980一),男,广东开平人,助教.78计算机与现代化2007年第1O期进八阻塞lBlocked)状态,暂时停止执行.例如线程进行I/O操作,等待用户输人数据.当一个运行状态的线程发生阻塞时,调用器立即调用就绪队列中的另一个线程开始运行.(4)阻塞状态就绪状态.当处于阻塞状态的线程所等待的条件已经具备,例如用户输人操作已经完成时,该线程将解除阻塞,进入就绪状态.(5)运行状态终止状态线程的Fun()方法常执行完毕后.其运行也就自然结束线程进人终止(Exit)状态也可以在运行过程中,jFIF常地终L卜一个线程的执行,例如调用stop()方法.2线程调度算法在此演示系统中采用了两种线程调度算法:FIFO(先来先服务)和优先级调度算法.(1)FIFO(先来先服务)调度算法.该算法是按照线程到达就绪队列的时间顺序分配CPU,这是一种不可强占式的算法.一旦线程占用了CPU.它一直运行到结束或因阻塞而自动放弃CPU.这种调度算法不能为个优先级高的紧急线程优先分配处理机,故该算法不能直接用于实时和交白一式分时系统中,(2)优先级调度算法.在Java中每个线程都具有一个优先级属性,用110之间的整数指定10级优先级别.在同一时刻有多个处于就绪状态的线程供选择时,线程调度程序将按如下规则选取其中一个投入运行:总是选取处于就绪状态线程中优先级最高的线程投入运行;不断地询问线程状态并唤醒被阻塞的线程,一旦有一个线程从阻塞状态变成就绪状态,重新计算所有处于就绪状态线程的优先级,从中选取优先级最高的线程投入运行.3多线程演示程序设计该执行过程反映了线程生命周期中不同状态的转换,其中从就绪状态到执行状态采用了FIFO(先来先服务)和优先级调度算法两种调度算法.演示界面如图2所示.该仿真程序中运行了6个线程,其中每个不同颜色的小球代表一个线程,分别用FIFO和优先级算法演示了前面说的几个状态的转换过程.在FIF0算法中6个线程的优先级一样,在就绪队列中按照球进入-F兰凸凸一营营U-!U西雪目埘Tt雠tt4l-?眦+l-+-qIt0t越tht:+H悱f嘲n嚏-龃tttt雌H-t埘.1,tll芏l-埔畦t舳tt鼬t图2线程演不程序执行界面的先后顺序被执行状态调用.而在优先级算法中规定了每个线程的不同优先级,黑球优先级为1,红球优先级为2,蓝球优先级为3,黄球优先级为4,粉红球优先级为5,最后的绿球优先级为6,在就绪队列中,看谁的优先级高谁先被调用.6个球在运行完毕后各自处理各自的事件.该实例主要让操作系统学习者了解线程在计算机中各个状态之间的转换和最基本两种调度算法的作用和不同之处.4Java多线程编程技术1.Thread类.Thread类不是抽象类,该类封装了线程的行为.要创建一个线程,必须创建一个继承Thread类的新类,实现Thread的rHn()方法完成创建工作.创建时并不直接调用此方法,而是调用Thread类的start()方法.该方法再凋用驯()方法.下面的代码说明了它的用法:创建两个新线程importjava.util.;classTimePrinterextendsThreadintpauseTime;Stringnmne;publicTimePrinter(intx,Stringn)pauseTime=x:nffle=n:publicvoidrun()while(tme)trySystem.out.pfinfln(nmlle+:+newDate(System.ctrrrentTimeMillis();Thread.sleep(pauseTime);catch(Exceptione)System.out.prinfln(e);staticpublicvoidmain(Stringargs)TimePrintertpl=newTimePrinter(1000,FastGuy);2007年第10期刘洪等:基于Java多线程的演示程序设计79tp1stafft();System.outprindn(e):1imePinteJtp2=nehTimePrinter(3000,SlowGuy);tp2stail(;本例中完成了两个线程的创建工作.通过创建两个新线程,线程按两个不同的时间间隔在屏幕上显示当前时间.包括主线程main()共三个线程.但是,有时要作为线程运行的类可能已经是某个类层次的一部分,所以就不能再按这种机制创建线程.在Java编程语言中,只允许个类继承一个父类,但是一个类中可以实现任意数量的接口,为了减少类层次,避免多次继承qhread类及其子类,就要使用trainable接口.2.Runnable接口此接n有一-个FU11()方法,该方法必须南实现J此接口的类实现.但是,就运行这个类而言,其编程与前一个示例不同.我们可以用runnable接口改写前一个示例.创建两个新线程而不增加类层次impojava.util:classTimePdnterimplementsRunnableintpauseTime:Stmiglla1le:publicTimePrmter(int.Stnng/3)pauseFime=x:ham=11:publicvoidmn()while(true)trySystem.out.pfintln(nalne+:+newDate(System.eurrentTimeMillis();Thread.sleep(pauseTime);catch(Exceptione)staticpublicvoidmain(Stringargs)Threadtl=newThread(newTimePrinter(1000,FastGuy);t1.start();Threadt2=newThread(newTimePrinter(3000.SlowGuy):t2start():tt使用nmnable接口时,不能直接创建所需类的对象并运行它,必须从Thread类的个实例内部运行它.5结束语使用该演示程序教学,使多线程的概念有了一个直观的表现方式,学习者能更好地掌握线程的基本概念,了解线程运动的基本规律.对线程实际运行过程中发生的关键事件有更深刻的印象.参考文献:f1孙钟秀,等操作系统教程(第3版)M北京:高等教育出版社,20032刘林,周纯杰,陈笛Java技术基础M武汉:华中科技大学出版社,2002.3AndrewSTanenbaum.ModemOperatingSystemM.PrenticeHal1.2002,4WilliamStagings.操作系统一内核与设计原理M.魏迎梅译.北京:电子工业出版社,2000.5BruceEcke1.Java编程思想M.北京:机械工业出版社.2002.6CayHorstmann,GaryComel1.CoreJava:7.M.北京:机械工业出版社,2003.,3结束语一个安全的网络需要可靠的访问控制作保障.在网络规模变大,用户增多,需求更复杂的情况下,传统的DAC和MAC已经不能满足许多企业或组织的安全需求,基于角色的访问控制RBAC便明显地显示出其优越性RBAC为内部网络环境提供了使用基于角色访问控制机制的优势,甚至在改善系统的过程中,可以不改动原有代码而只需加入新的RBAC机制来完善现有系统.RBAC机制的引入,不仅为

温馨提示

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

评论

0/150

提交评论