- 1、本文档共50页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
哈尔滨工业大学计算机系代亚非 第11章 Java多线程 学习导读 多线程机制使得程序的多个子任务能够“同时”执行 多线程是指同时存在几个执行体,按几条不同的执行线索共同工作的情况。Java语言实现了对多线程的支持,它使得编程人员可以很方便地开发出能同时处理多个任务的功能强大的应用程序。 在Java语言中,不仅语言本身有多线程的支持,可以方便地生成多线程的程序,而且运行环境也利用多线程的应用程序并发提供多种服务。 本章介绍如何实现Java语言中的多线程机制 课程结构 11.1 Java中的线程 11.2 Thread和Runnable 11.3 多线程并发程序 11.4 线程池 11.5 线程的同步 11.1 Java中的线程 11.1 Java中的线程 多线程的优势: 减轻编写交互频繁、涉及面多的程序的困难. 程序的吞吐量会得到改善. 由多个处理器的系统,可以并发运行不同的线程.(否则,任何时刻只有一个线程在运行) 11.1 Java中的线程 一、 什么是线程? 1、进程 在程序开始投入运行时,系统从程序入口开始按语句的顺序(其中包括顺序、分支和循环)完成相应指令直至结尾,从出口退出,同时整个程序结束。这样的语句结构称之为进程,或者说进程就是程序在处理机中的一次运行。? 一个进程既包括其所要执行的指令,也包括了执行指令所需的任何系统资源,如CPU、内存空间、I/O端口等,不同进程所占用的系统资源相对独立。 11.1 Java中的线程 2、线程 线程是程序的顺序控制流,是比进程单位更小的执行单位,在形式上同进程十分相似——都是用一个顺序执行的语句序列来完成特定的功能。一个简单的线程也有开始、顺序执行、和结束。在一个线程的运行时间的任何一段时间内,存在一个简单的执行点。但是,一个线程本身不是程序,一个线程自身是不能自己运行,必须栖身于某一进程之中,由进程触发执行,在程序内运行。 11.1 Java中的线程 3、线程与进程的区别: 多个进程的内部数据和状态都是完全独立的,而多线程是共享一块内存空间和一组系统资源,有可能互相影响. 线程本身的数据通常只有寄存器数据,以及一个程序执行时使用的堆栈,所以线程的切换比进程切换的负担要小。 在系统资源的使用上,属于同一进程的所有线程共享该进程的系统资源,但是线程之间切换的速度比进程切换要快得多。 11.1 Java中的线程 4、多线程 有的时候,并不是只有一个简单顺序线程。在同一个时间内,可以在一个程序内运行多个线程实现多个任务。例如:浏览器就是一个多线程的典型应用。在一个浏览器中,下载一个applet小程序或图象,播放音乐或视频、用户可以翻滚浏览页面等多个任务。 Java语言把线程或执行环境(execution context)当作一种拥有自己的程序代码和数据的对CPU的封装单位,由虚拟机提供控制。Java类库中的类java.lang.Thread允许创建并控制所创建的线程。 11.1 Java中的线程 二、线程的状态和生命周期 1.新建 2.就绪 3.运行 4.阻塞 5.死亡 11.1 Java中的线程 1.新建 当一个Thread类或其子类的对象被声明并创建时,新生的线程对象处于新建状态。此时它已经有了相应的内存空间和其他资源,并已被初始化。 2.就绪 处于新建状态的线程被启动后,将进入线程队列排队等待CPU时间片,此时它已经具备了运行的条件,一旦轮到它来享用CPU资源时,就可以脱离创建它的主线程独立开始自己的生命周期了。另外,原来处于阻塞状态的线程被解除阻塞后也将进入就绪状态。 11.1 Java中的线程 3.运行 当就绪状态的线程被调度并获得处理器资源时,便进入运行状态。 run方法 每一个Thread类及其子类的对象都有一个重要的run()方法,当线程对象被调度执行时,它将自动调用本对象的run()方法,从第一句开始顺序执行。run()方法定义了这一类线程的操作和功能。 11.1 Java中的线程 4.阻塞 一个正在执行的线程如果在某些特殊情况下,如被人为挂起或需要执行费时的输入输出操作时,将让出CPU并暂时中止自己的执行,进入阻塞状态。 阻塞时它不能进入排列队列,只有当引起阻塞的原因被消除时,线程才可以转入就绪状态,重新进到线程队列中排队等待CPU资源,以便从原来终止处开始继续执行。 11.1 Java中的线程 5.死亡 处于死亡状态的线程不具有继续运行的能力。线程死亡的原因有两个: 一个是正常运行的线程完成了它的全部工作,即执行完了run()方法的最后一个语句并退出; 另一个是线程被提前强制性地终止,如通过执行stop()方法或destroy()终止线程。 11.1 Java中的线程 三、线程调度与优先级 处于就绪状态的线程排队等候处理器资源 线程先分配
您可能关注的文档
- DreamweaverCS3网页设计与制作教程第2版课件作者申莉莉教案10章节.ppt
- 工程力学课件作者赵晴第十章节梁的弯曲.ppt
- Linux网络管理与配置课件作者姚越第一章节安装.ppt
- Linux网络技术课件作者王波第1章节概述与安装.ppt
- 工程流体力学课件作者闻建龙第十一章节流体力学实验技术.ppt
- Linux网络技术课件作者王波第2章节命令与示例.ppt
- Linux网络技术课件作者王波第3章节shell编程.ppt
- 工程统计学课件作者苗瑞蒋祖华3假设检验.ppt
- Linux网络技术课件作者王波第6章节APA章节E服务.ppt
- Linux网络技术课件作者王波第7章节VSFTPD服务.ppt
文档评论(0)