第13章 Java多线程机制.pptVIP

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

第13章 Java多线程机制 本章要点: 进程与线程 线程的状态 多线程的实现方法 通过继承Thread类实现多线程 通过Runnable接口实现多线程 线程的调度 线程的同步实现 13.1 Java中的线程 计算机的发展日新月异,个人计算机上的操作系统也纷纷采用多任务和分时设计,将早期只有大型计算机才具有的系统特性带到了个人计算机系统中。一般可以在同一时间内执行多个程序的操作系统都有进程的概念。一个进程就是一个执行中的程序,而每一个进程都有自己独立的一块内存空间、一组系统资源。在进程概念中,每一个进程的内部数据和状态都是完全独立的。Java程序通过流控制来执行程序流,程序中单个顺序的流控制称为线程,多线程则指的是在单个程序中可以同时运行多个不同的线程,执行不同的任务。多线程意味着一个程序的多行语句可以看上去几乎在同一时间内同时运行。 13.1.1 进程与线程 进程是程序的一次动态执行过程,它对应了从代码加载、执行至执行完毕的一个完整过程,这个过程也是进程本身从产生、发展至消亡的过程。如果把公司一天的工作比作一个进程,那么早上公司开门上班是进程的开始,晚上下班关门是进程的结束。 线程是比进程更小的执行单位。一个进程在其执行过程中,可以产生多个线程,形成多条执行线索,每条线索,即每个线程也有它自身的产生、存在和消亡的过程,也是一个动态的概念。就像公司一天的工作开始后,可以有多个不同的“线程”进行运作,如财务部门、开发部门、销售部门等。我们知道,每个进程都有一段专用的内存区域,与此不同的是,线程间可以共享相同的内存单元(包括代码与数据),并利用这些共享单元来实现数据交换、实时通信与必要的同步操作。比如在公司一天的工作开始后,财务部门、开发部门和销售部门这3个线程可以共享公司的内部网络资源,财务部门、销售部门可以共享公司的账目数据等。多线程的程序能更好地表达和解决现实世界的具体问题,是计算机应用开发和程序设计的一个必然发展趋势。 13.1.2 线程的状态 一个线程在任何时候都处于某种线程状态。线程的几个主要状态有创建、运行、中断和死亡4 种状态。 1. 创建(New Thread) Java的线程是通过java.lang.Thread类来实现的。当我们生成一个Thread类的对象之后,一个新的线程就产生了。执行下列语句时,线程就处于创建状态: Thread myThread = new MyThreadClass(); 当一个线程处于创建状态时,它仅仅是一个空的线程对象,系统不为它分配资源。 2. 运行(Runnable) 线程创建之后就具备了运行的条件,一旦轮到它来享用CPU 资源时,就可以脱离创建它的主线程独立开始自己的生命周期了。执行下列语句时,线程就处于运行状态: Thread myThread = new MyThreadClass(); myThread.start(); 当一个线程处于可运行状态时,系统为这个线程分配了它所需的系统资源,安排其运行并调用线程运行方法,这样就使得该线程处于可运行(Runnable)状态。需要注意的是这一状态并不是运行中状态(Running),因为线程也许实际上并未真正运行。由于很多计算机都是单处理器的,所以要在同一时刻运行所有的处于可运行状态的线程是不可能的,Java的运行系统必须实现调度来保证这些线程共享处理器。 3. 中断(Not Runnable) 一个正在执行的线程可能被人为地中断,使其让出CPU的使用权,暂时中止自己的执行,进入阻塞状态。阻塞时它不能进入排队队列,只有当引起阻塞的原因被消除时,线程才可以转入就绪状态,重新进到线程队列中排队等待CPU资源,以便从原来终止处开始继续运行。进入中断状态的原因有如下几条: (1)调用了sleep() 方法; (2)调用了suspend() 方法; (3)为等候一个条件变量,线程调用wait() 方法; (4)输入输出流中发生线程阻塞。 4. 死亡(Dead) 处于死亡状态的线程不具有继续运行的能力。线程死亡的原因有两个,一个是正常运行的线程完成了它的全部工作,另一个是线程被提前强制性地终止。所谓死亡状态就是线程释放了实体,即释放分配给线程对象的内存。 线程的状态 13.1.3 多线程的实现方法 在Java中,创建线程的方法有两种:一种方法是通过创建Thread类的子类来实现,另一种方法是通过实现Runnable接口的类来实现,具体如下。 方法一:定义一个线程类,它继承线程类Thread并重写其中的方法run() ,这时在初始化这个类的实例时,目标target可为null,表示由这个实例来执行线程体。由于Java只支持单重继承,用这种方法定义的类不能再继承其他父类

文档评论(0)

克拉钻 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档