网站大量收购独家精品文档,联系QQ:2885784924

JAVA多线程详解.docVIP

  1. 1、本文档共15页,可阅读全部内容。
  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文档。上传文档
查看更多
第8章 多线程 8.1 线程的基本概念 要深入了解线程,先要弄清楚程序、进程与线程3个相互关联的基本概念。 程序: 程序是一段代码,是计算机执行的蓝本。编写程序就是希望计算机按程序蓝本执行。 进程: 进程是程序的一次执行过程,从代码加载、执行,直至完成的一个完整的过程。这个过程也是进程从产生、运行至消亡的过程。程序与进程之间的关系如同乐谱和一次演奏的关系。乐谱好比程序,演奏好比进程,演奏的依据是乐谱进程执行的依据是程序。 线程: 线程是一个控制流,也是一个执行过程,但执行单位比进程小。一个进程在其执行过程中,可以产生多个线程,形成多条执行线索。每条线索,即每个线程也有它自身的产生、运行和消亡的过程。如果把进程比作一次乐曲的演奏,线程可以比作每个乐师的奏乐。从外面看,一场音乐会给人们一次美好的音乐享受;从内部看,每个乐师正在按要求认真工作。乐师在工作时,相互之间有协调和配合。 线程与进程比较,它们的共同点,都是程序的一个执行过程。不同点是进程是一个实体,每个进程有自己的状态、专用数据段(独立内存资源);同一个进程下的线程则共享进程的数据段。创建进程时,必须建立其专用数据段;创建线程时不必建立新的数据段。线程不是能够独立运行的程序,而只是某个进程内的一个执行流。 线程的建立和线程间的切换速度大大超过进程,不需要数据段的保护和恢复。同时,又具备进程的大多数优点,所以线程的执行效率比进程的执行效率高。缺点是由于多个线程共享数据段,带来数据访问中的相斥和同步问题,使系统管理变得复杂。 多线程在提高输入/输出设备平行工作能力、有效利用系统资源、改善计算机通信及发挥硬件的多处理器功能等方面有很多的优势。 8.1.1 线程的生命周期 一个线程“创建→工作→死亡”的过程称为线程的生命周期。线程生命周期共有五个状态:新建状态、就绪状态、运行状态、阻塞状态和死亡状态。 新建状态 新建状态是指创建了一个线程,但它们还没有启动。处于新建状态的线程对象,只能够被启动或者终止。例如,以下代码使线程myThread处于新建状态: Thread myThread=new Thread(); 就绪状态 就绪状态是当线程处于新建状态后,调用了start()方法,线程就处于就绪状态。就绪状态线程具备了运行条件,但尚未进入运行状态。处于就绪状态的线程可以多个,这些就绪状态的线程将在就绪队列中排队,等待CPU资源。就绪状态的线程通过线程调度获得CPU资源变成运行状态。例如,以下代码使myThread处于就绪状态。 myThread.start(); 运行状态 运行状态是某个就绪状态的线程获得CPU资源,正在运行。如果有更高优先级的线程进入就绪状态,则该线程将被迫放弃对CPU的控制器,加入就绪状态。使用yield()方法可以使线程主动放弃CPU。线程也可能由于结束或执行stop()方法进入死亡状态。每个线程对象都有一个run()方法,当线程对象开始执行时,系统就调用对象的run()方法。 阻塞状态 柱塞状态是正在运行的线程遇到某个特殊情况。例如,延迟、挂起、等待I/O操作完成等,进入柱塞状态的线程让出CPU,并暂时停止自己的执行。线程进入柱塞状态后,就一直等待,直到引起柱塞的原因被消失,线程有转入就是状态,重新进入就绪列队排列。当线程再次变成运行状态时,将从暂停处开始继续运行。 线程从柱塞状态恢复到就绪状态,有三种途径: 自动恢复: 用resume()方法恢复: 用notif()或nitifyAll()方法通知恢复。 也可能因为别的线程强制某个处于阻塞状态的线程终止,该线程就从阻塞状态进入死亡状态。 死亡状态 死亡状态是指线程不再具有继续运行的能力,也不能再转到其他状态。一般有两种情况使一个线程终止,进入死亡状态。 线程完成了全部工作,即执行完run()方法的最后一条语句。 线程被提前强制性终止。 图8.1是线程的生命周期图,图中给出从一种状态转变成另一种状态的各种可能的原因。 8.1.2 线程调度与优先级 Java提供一个线程调度器来监视和控制就绪状态的线程。线程的调度策略采用抢占式,优先级高的线程比优先级低的线程优先执行。在优先级相同的情况下,就按“先到先服务”的原则。线程的优先级用数值表示,数值越大优先级越高(范围1~10)。每个线程根据继承特性自动从父进程获得一个线程的优先级,也可在程序中重新设置。对于任务较紧急的重要线程,可安排较高的优先级。相反,则给一个较低的优先级。 每个Java程序都有一个默认的主线程,就是通过JVM(Java Virtual Machine,Java虚拟机Interrupt Expiration异常,应将sleep方法写在try块中,并用catch块处理异常。sleep()方法是static方法,不可重载。 currentThread()

文档评论(0)

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

1亿VIP精品文档

相关文档