- 1、本文档共15页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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()
您可能关注的文档
- 《燃烧和灭火》[说课].doc
- 《生态系统的稳定性》教学案例1.doc
- 1.1. 生物氧化.ppt
- 1.2 一元一次不等式组的解法.ppt
- 金刚石石墨和C60教案.doc
- 刘欢法学学年论文论文最终稿.doc
- 论中学生物教学中的人口教育.doc
- 贫困生建档情况表.doc
- 人教版四年级语文下册第四单元达标测试卷.doc
- 如果你地理会考想拿A、———知识点超级详解.doc
- CNAS-CL63-2017 司法鉴定-法庭科学机构能力认可准则在声像资料鉴定领域的应用说明.docx
- 12J7-3 河北《内装修-吊顶》.docx
- 12N2 河北省12系列建筑标准设计图集 燃气(油)供热锅炉房工程.docx
- 内蒙古 12S8 排水工程 DBJ03-22-2014.docx
- 山西省 12S10 12系列建筑标准设计 管道支架、吊架.docx
- 16J601-木门窗标准图集.docx
- 12J8 河北省12系列《 楼梯》.docx
- CNAS-GL37 2015 校准和测量能力(CMC)表示指南.docx
- CNAS-RL02-2016 能力验证规则.docx
- 津02SJ601 PVC塑料门窗标准.docx
最近下载
- 钻井工程培训.ppt
- 2023河南三门峡市公安局招聘留置看护队员197人考试备考题库及答案解析.docx VIP
- 超星尔雅学习通《形势与政策(2025春)》章节测试题库及答案一套.docx VIP
- 葡萄酒工艺学完整版.ppt VIP
- 高中语文课件:《红楼梦》选讲16.pptx
- 超星尔雅学习通《形势与政策(2025春)》章节测试题库【有一套】.docx VIP
- 社会调查研究方法:社会现象的测量PPT教学课件.pptx
- BS EN 13749-2011铁路应用 — 轮对和转向架 — 转向架结构要求的规定方法(中文版).doc
- 某村供水工程初步设计报告.docx VIP
- 2025中国低空经济行业研究报告.pdf
文档评论(0)