- 1、本文档共5页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
线程的状态转换
一个线程创建之后,总是处于其生命周期的4个状态之一中。线程的状态表明此线 程当前正在进行的活动,而线程的状态是可以通过程序来进行控制的,就是说,可以对线程进行操作来改变状态。这些操作包括启动(start)、终止(stop)、睡眠(sleep)、挂起 (suspend)、恢复(resume)、等待(wait)和通知(notify)。每一个操作都对应了一个方法,这些方法是由软件包java.lang提供的。 ①创建(new)状态 如果创建了一个线程而没有启动它,那么,此线程就处于创建状态。比如,下述语句执行 以后,使系统有了一个处于创建状态的线程myThread: Thread myThread= new MyThreadClass(); 其中,MyThreadClass()是Thread的子类,而Thread是由Java系统的java.lang软件包提 供的。 处于创建状态的线程还没有获得应有的资源,所以,这是一个空的线程。线程只有通过启动后,系统才会为它分配资源。对处于创建状态的线程可以进行两种操作:一是启动 (start)操作,使其进入可运行状态,二是终止(stop)操作,使其进入消亡状态。如果进入到消 亡状态,那么,此后这个线程就不能进入其他状态,也就是说,它不再存在了。 start方法是对应启动操作的方法,其具体功能是为线程分配必要的系统资源;将线程设置为可运行状态,从而可以使系统调度这个线程。 ②可运行(runnable)状态 如果对一个处于创建状态的线程进行启动操作,则此线程便进入可运行状态。仍以前面 创建的myThread线程为例,用下列语句: myThread.start(); 则线程myThread进入可运行状态。上述语句实质上是调用了线程体即run()方法。注意, run()方法包含在myThread线程中,也就是先由java.lang包的Thread类将run()方法 传递给子类MyThreadClass(),再通过创建线程由于类MyThreadClass()传递给线程 myThread。 线程处于可运行状态只说明它具备了运行条件,但可运行状态并不一定是运行状态。因 为在单处理器系统中运行多线程程序,实际上在一个时间点只有一个线程在运行,而系统中 往往有多个线程同时处于可运行状态。系统通过快速切换和调度使所有可运行线程共享处 理器,造成宏观上的多线程并发运行。 可见,一个线程是否处于运行状态,除了必须处于可运行状态外,还取决于系统的调度。 在可运行状态可以进行多种操作,最通常的是从run()方法正常退出而使线程结束,进 入消亡状态。此外,还可以有如下操作: 挂起操作,通过调用suspend方法来实现; 睡眠操作,通过调用sleep方法来实现; 等待操作,通过调用wait方法来实现; 退让操作,通过调用yield方法来实现; 终止操作,通过调用stop方法来实现。 前面三种操作都会使一个处于可运行状态的线程进入不可运行状态。比如,仍以 myThread线程为例,当其处于可运行状态后,再用如下语句: myThreadsleep(5000); 则调用sleep方法使myThread线程睡眠5秒(5000毫秒)。这5秒内,此线程不能被系统调 度运行,只有过5秒后,myThread线程才会醒来并自动回到可运行状态。 如果一个线程被执行挂起操作而转到不可运行状态,则必须通过调用恢复(resume)操 作,才能使这个线程再回到可运行状态。 退让操作是使某个线程把CPU控制权提前转交给同级优先权的其他线程。 对可运行状态的线程也可以通过调用stop方法使其进入消亡状态。 ③不可运行(not runnable)状态 不可运行状态都是由可运行状态转变来的。一个处于可运行状态的线程,如果遇到挂起 (suspend)操作、睡眠(sleep)操作或者等待(wait)操作,就会进入不可运行状态。另外,如果 一个线程是和I/O操作有关的,那么,在执行I/O指令时,由于外设速度远远低于处理器速 度而使线程受到阻塞,从而进入不可运行状态,只有外设完成输入/输出之后,该线程才会自 动回到可运行状态。线程进入不可运行状态后,还可以再回到可运行状态。通常有三种途径 使其恢复到可运行状态。 一是自动恢复。 通过睡眠(sleep)操作而进入不可运行状态的线程会在过了指定睡眠时间以后自动恢 复到可运行状态;由于I/O阻塞而进入不可运行状态的线程在外设完成
您可能关注的文档
- Unit1课外作业1.doc
- 06-管理和运行应用程序.ppt
- 04分数乘整数练习课马新磊.doc
- 公示原则专RN利权质押RN的.doc
- 灵秀中心校校本研训计划.doc
- 中考英语易错题 16 .doc
- 2005-2006第二学期数值分析期终考试试题(B).doc
- 初中初一地理卷面分析.doc
- 关于IE7CSS0day漏洞的说明.doc
- 冬季五防管理规定.doc
- Unit1CulturalHeritageReadingforWriting课件高中英语人教版(1).pptx
- Unit1ANewStart单元阶段检测2024级高一新生英语自学资料库(2019).docx
- 2024年地面安全生产辅助人员考试题库多选300题.doc
- Lesson2Howmuchisthefootball?(课件)接力版英语四年级下册(1).pptx
- 人教版七年级生物:生物圈是最大的生态系统.ppt
- 1.5遗传与进化(教学设计)九年级科学下册高效课堂(浙教版).docx
- 5.2土壤说课课件人教版必修一高一年级.pptx
- 3.2DNA的结构课件高一下学期生物人教版必修2.pptx
- 2024-2025学年讲义数学(选择性人教A版2019)第11讲7.3.1离散型随机变量的均值.docx
- Unit5短语句子默写纸牛津译林版英语九年级上册.docx
文档评论(0)