- 1、本文档共50页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Java线程知识深入解析
一般来说 , 我们把正在计算机中执行的程序叫做 " 进程 "(Process) , 而不将其称
为程序 (Program) 。所谓 " 线程 "(Thread), 是" 进程 " 中某个单一顺序的控制流。 新
兴的操作系统 , 如 Mac,Windows NT,Windows 95 等 , 大多采用多线程的概念 , 把线 程
视为基本执行单位。线程也是 Java 中的相当重要的组成部分之一。
甚至最简单的 Applet 也是由多个线程来完成的。 在 Java 中, 任何一个 Applet
的 paint() 和 update() 方法都是由 AWT(Abstract Window Toolkit) 绘图与事件
处理线程调用的 , 而 Applet 主要的里程碑方法—— init(),start(),stop() 和
destory() ——是由执行该 Applet 的应用调用的。
单线程的概念没有什么新的地方 , 真正有趣的是在一个程序中同时使用多个
线程来完成不同的任务。某些地方用轻量进程 (Lightweig ht Process) 来代替线
程 , 线程与真正进程的相似性在于它们都是单一顺序控制流。然而线程被认为轻
量是由于它运行于整个程序的上下文内 , 能使用整个程序共有的资源和程序环
境。
作为单一顺序控制流 , 在运行的程序内线程必须拥有一些资源作为必要的开
销。例如 , 必须有执行堆栈和程序计数器在线程内执行的代码只在它的上下文中
起作用 , 因此某些地方用 " 执行上下文 " 来代替 " 线程" 。
线程属性
为了正确有效地使用线程 , 必须理解线程的各个方面并了解 Java 实时系
统。必须知道如何提供线程体、线程的生命周期、实时系统如何调度线程、线程
组、什么是幽灵线程 (Demo nThread) 。
(1) 线程体
所有的操作都发生在线程体中 , 在 Java 中线程体是从 Thread 类继承的 run()
方法 , 或实现 Runnable 接口的类中的 run() 方法。当线程产生并初始化后 , 实时
系统调用它的 run() 方法。 run() 方法内的代码实现所产生线程的行为 , 它是线程
的主要部分。
(2) 线程状态
附图表示了线程在它的生命周期内的任何时刻所能处的状态以及引起状态
改变的方法。这图并不是完整的有限状态图 , 但基本概括了线程中比较感兴趣和
普遍的方面。以下讨论有关线程生命周期以此为据。
●新线程态 (New Thread)
产生一个 Thread 对象就生成一个新线程。 当线程处于 " 新线程 " 状态时 , 仅仅
是一个空线程对象 , 它还没有分配到系统资源。因此只能启动或终止它。任何其
他操作都会引发异常。
●可运行态 (Runnable)
start() 方法产生运行线程所必须的资源 , 调度线程执行 , 并且调用线程的
run () 方法。在这时线程处于可运行态。该状态不称为运行态是因为这时的线程
并不总是一直占用处理机。 特别是对于只有一个处理机的 PC而言 , 任何时刻只能
有一个处于可运行态的线程占用处理 机。Java 通过调度来实现多线程对处理机
的共享。
●非运行态 (Not Runnable)
当以下事件发生时 , 线程进入非运行态。
①suspend() 方法被调用 ;
②sleep() 方法被调用 ;
③线程使用 wait() 来等待条件变量 ;
④线程处于 I/O 等待
文档评论(0)