新网络编程与计算技术 教学课件 刘化君 第7章 多线程与非阻塞通信.pptVIP

新网络编程与计算技术 教学课件 刘化君 第7章 多线程与非阻塞通信.ppt

  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文档。上传文档
查看更多
7.1 Java中的多线程 多线程编程技术是Java网络编程的重要内容。在网络编程中经过分析可以发现,很多功能都是需要并发执行的。可以用几个不同的独立线程去完成不同的任务。在讨论Java中的多线程网络程序设计之前,先介绍一些与线程有关的操作系统知识。 7.1.1 程序、进程与线程 通常所说的程序是指用编辑软件编写好的一段静态代码(如.java文件),它是应用软件执行的蓝本;经过编译之后变成字节码文件(如.class文件)。这两种类型的文件都是保存在磁盘中的,把它们称作“程序(program)”。 当用JVM来运行class文件时,计算机会从磁盘中把程序代码加载到内存中运行,这时就把运行中的程序称为“进程(process)”。进程对应了从代码加载、执行到执行完毕的一个完整过程。 线程与进程相似,线程是比进程更小的执行单位;是一段完成某个特定功能的代码。一个线程是一个程序内部的顺序控制流。但与进程不同的是,同类的多个线程共享一块内存空间和一组系统资源,每个线程有独立的运行栈和程序计数器(PC),线程切换的开销小。所以系统在产生一个线程或者在各个线程之间切换时,负担要比进程小的多,正因如此,线程被称为轻负荷进程(light-weight process)。一个进程中可以包含多个线程。 Java程序通过流控制来执行程序流,因此把程序中单个顺序的流控制称为线程。多线程则指的是在单个程序中可以同时运行多个不同的线程,执行不同的任务。多线程意味着在一个应用程序中,有多个顺序流同时执行。 多线程是相对于单线程而言的,普通的DOS和早期的Windows操作系统都采用单线程程序结构,其工作原理是:主程序有一个主消息循环队列,它不断从消息队列中读入消息来决定下一步所要做的工作,一般是一个子函数,只有等这个子函数执行完它的任务返回后,主程序才能接收另外的消息来执行其他任务。例如,若某子函数的功能是在读一个网络数据,或是读一个文件,则只有等待读完这些数据或文件才能接收下一个消息。计算机的CPU除了执行着一个子函数过程外,不做其他任何事情。这样,在读取网络数据或等待用户输入时,往往会使计算机的CPU有很多时间处于等待状态。多线程编程机制利用这一特点,将一个大任务(进程)分成多个并发小任务(线程),使CPU无需等待地执行每一个小任务,完成多任务的“同时”处理,解决了CPU时间的浪费问题。为了实现多任务处理,Java语言提供了较完善的多线程处理机制,所以,在Java语言中实现多线程相当方便。一些动态效果(动画、动态字幕等)常常利用多线程技术来实现。 每一个Java程序都有一个默认的主线程。Java应用程序总是从主类的main()方法开始执行。当JVM加载代码,发现main()方法之后,就会启动一个线程,这个线程称为“主线程”,该线程负责执行main()方法。在main()方法的执行过程中再创建的线程,称为程序中其他线程。如果main()方法中创建了其他的线程,那么JVM就要在主线程和其他线程之间轮流切换,让主线程与其他线程轮流执行,保证每个线程都有机会使用CPU资源,main()方法即使执行完最后的语句,JVM也不会结束程序,要等到程序中的所有线程都结束后,才结束Java应用程序,如图7-1所示。 7.1.2 Java多线程类和接口 Java的线程是通过java.lang.Thread类来实现的。当生成一个Thread类的对象之后,一个新的线程就产生了。该线程实例表示Java解释器中真正的线程,通过它可以启动线程、终止线程、线程挂起等。每个线程都是通过类Thread在Java的软件包Java.lang中定义的,其构造函数为: public Thread (ThreadGroup group,Runnable target,String name); 其中,group 指明该线程所属的线程组;target为实际执行线程体的目标对象,它必须实现接口Runnable;name为线程名。Java中的每个线程都有自己的名称,Java提供了不同Thread类构造函数,允许给线程指定名称。如果name为null时,则Java自动提供惟一的名称。当上述构造函数的某个参数为null时,可得到如表7-1所列出的一些常用构造函数。 可以通过两种方法实现线程体。 1)定义一个线程类,然后去继承Thread这个线程类,接着重写其中的run()方法。线程所要运行的程序代码,就是run()方法中的程序代码。由于Java只支持单重继承,用这种方法定义的类不能再继承其它父类。 2)提供一个实现接口Runnable的类作为一个线程的目标对象,在初始化一个Thread类或者Thread子类的线程对象时,把目标对象传递给这个线程实例,由该目标对象提供线程体run()。这时,实

文档评论(0)

时间加速器 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档