第八章线程.pptVIP

  1. 1、本文档共23页,可阅读全部内容。
  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文档。上传文档
查看更多
第八章线程

第八章 线程 ?本章导读 Java中的线程 线程的生命周期 线程的优先级与调度管理 Thread的子类创建线程 Runable接口 线程同步 wait()、notify 和notifyAll()方法 挂起、恢复和终止线程 线程的联合 守护线程 线程概述 Java语言的一大特点就是内置对多线程的支持(java.lang包中的Thread类)。多线程是指同时存在几个执行体,按几条不同的执行线索共同工作的情况,它使得编程人员可以很方便地开发出具有多线程功能、能同时处理多个任务的功能强大的应用程序。虽然执行线程给人一种几个事件同时发生的感觉,但这只是一种错觉,因为我们的计算机在任何给定的时刻只能执行这些线程中的一个。为了建立这些线程正在同步执行的感觉,Java快速地把控制从一个线程切换到另一个线程。 8.1 Java中的线程 程序是一段静态的代码,它是应用软件执行的蓝本。进程是程序的一次动态执行过程,它对应了从代码加载、执行至执行完毕的一个完整过程,这个过程也是进程本身从产生、发展至消亡的过程。线程是比进程更小的执行单位。一个进程在其执行过程中,可以产生多个线程,形成多条执行线索,每条线索,即每个线程也有它自身的产生、存在和消亡的过程,也是一个动态的概念。 Java应用程序总是从主类的main方法开始执行。当JVM加载代码,发现main方法之后,就会启动一个线程,这个线程称为“主线程”,该线程负责执行main方法。那么,在main方法中再创建的线程,就称为主线程中的线程。如果main方法中没有创建其他线程,那么当main方法执行完最后一个语句,即main方法返回时,JVM就会结束该Java应用程序。如果main方法中又创建了其他线程,那么JVM就要在主线程和其他线程之间轮流切换,保证每个线程都有机会使用CPU资源,main方法即使执行完最后的语句,JVM也不会结束该程序,JVM一直要等到主线程中的所有线程都结束之后,才结束该Java应用程序。 8.2 线程的生命周期 在Java语言中,Thread类及其子类创建的对象称为线程。新建的线程在它的一个完整的生命周期中通常要经历4种状态。 1)新建:线程对象被声明并创建时 2)运行:线程对象调用start()方法 3)中断:中断的原因消除时,线程可以从中断处继续运行. 有4种原因的中断: *JVM将CPU资源从当前线程切换给其他线程 *线程使用CPU资源期间,执行了sleep(int millsecond)方法 *线程使用CPU资源期间,执行了wait()方法 *线程使用CPU资源期间,执行某个操作进入阻塞状态 4)死亡: 释放分配给线程对象的内存。 线程死亡的原因有二: 即执行完run()方法中的全部语句或线程被提前强制性终止,即强制run()方法结束。 例8-1 Thread的子类WriteWordThread创建了两个线程。 注:上述程序在不同的计算机运行或在同一台计算机反复运行的结果不尽相同,输出结果依赖当前CPU资源的使用情况。为了使结果尽量不依赖于当前CPU资源的使用情况,我们应当让线程主动调用sleep()方法让出CPU的使用权进入中断状态。 例8-2 例子8-1效果图 8.3 线程的优先级与调度管理 Java虚拟机中的线程调度器负责管理线程,调度器把线程的优先级分为10个级别,分别用Thread类中的类常量表示。每个Java线程的优先级都在常数1(Thread.MIN PRIORITY)到常数10(Thread.MAX_PRIORITY)的范围内。如果没有明确地设置线程的优先级别,每个线程的优先级都为常数5(包括主线)Thread.NORM_PRIORITY。 线程的优先级可以通过setPriority(int grade)方法调整,这一方法需要一个int类型参数。有些操作系统只能识别3个级别:1,5,10。 在采用时间片的系统中,每个线程都有机会获得CPU的使用权,以便使用CPU资源执行线程中的操作。当线程使用CPU资源的时间结束后,即使线程没有完成自己的全部操作,Java调度器也会中断当前线程的执行,把CPU的使用权切换给下一个排队等待的线程,当前线程将等待CPU资源的下一次轮回,然后从中断处继续执行。 Java调度器的任务是使高优先级的线程能始终运行,一旦时间片有空闲,则使具有同等优先级的线程以轮流的方式顺序使用时间片。 8.4 Thread 的子类创建线程 在Java语言中,用Thread类或子类创建线程对象。 用户可以扩展 Threa

文档评论(0)

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

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

1亿VIP精品文档

相关文档