第10章多线程讲义
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
什么是线程
• 在Java编程中,虚拟处理机封装在Thread类 的一个实例。构造线程时,代码和数据是由 传递给它的构造方法的对象指定的。
线程的生命周期
• 每个Java程序都有一个默认的主线程,对于 Java Applicatin应用程序,主线程就是main 方法执行的指令序列,对于Java Applet,主 线程指挥浏览器装载并执行Java Applet。
多线程技术的基本概念
– 什么是线程 – 线程的生命周期 – 多线程技术
什么是线程
• 线程和进程类似,是一段完成特定功能的代 码。线程是程序中单个程序的控制流,也是 一个进程内的基本调度单位。线程和进程一 样拥有独立的执行控制,并由操作系统负责 调度。
什么是线程
• 同一个进程可以包含多个线程,这些线程共 享属于该进程的一块内存空间和一组系统资 源,而线程自身的数据通常只有CPU的寄存 器数据,以及一个供程序执行时使用的堆栈, 系统在产生一个线程,或者在各个线程之间 切换时,负荷比进程小得多。
线程的生命周期
– 运行(Running):线程获得了CPU资源正在执 行任务,将一直运行到结束,除非此时它自动放 弃资源或有更加高优先级的线程进入。
线程的生命周期
– 阻塞(Blcked):线程是可以执行的,但由于某 些因素的阻碍处于停滞状态,系统排程器略过了 应给线程的CPU执行时间。
– 死亡(Dead):线程的正式结束方式,run方法 执行完毕并返回。
多线程技术
• 多个线程的执行是并发的,也就是在逻辑上 “同时”,而不管是否是物理上的“同时”。 如果系统只有一个CPU,那么真正的“同时” 是不可能的,但是由于CPU的速度非常快, 用户感觉不到其中的区别,因此也不用关心 它,只需要设想各个线程是同时执行即可。
多线程技术
• 多线程和传统的单线程在程序设计上最大的 区别在于,由于各个线程的控制流彼此独立, 使得各个线程之间的代码是无序执行的。
继承Thread类,覆盖方法run()
• 该方法的步骤是:从Thread类派生一个类, 覆盖Thread类中的run 方法,然后创建该子 类的对象,再调用start方法启动本线程。
• 【例10-1】 线程的创建(光盘:\源文件\第 10章\例10-1.txt)。
类“DrawLine”运行结果
类 “ D raw Line” 运 行 结 果
什么是线程
• 此外,由于线程知识在单个进程的作用域内 活动,所以线程之间的通信也比进程简单。 线程的实现要依赖操作系统,现在一般操作 系统都支持线程技术。
什么是线程
• 一个或更多的线程构成了一个进程。一个线 程或执行上下文由一个虚拟处理机、CPU执 行的代码和代码操作的数据3个主要部分组 成。
线程执行的主要组成部分
线程的创建
• 那么如何提供给Java开发人员线程执行的代 码呢?通过Thread类来实现。主要有两种方 法。
– 继承Thread类,覆盖方法run() – 实现Runnable接口
继承Thread类,覆盖方法run()
• Thread类最重要的方法是run()方法,它为 Thread类的start()方法所调用,并提供线程 所要执行的代码。为了指定自己新的代码, 只需要覆盖它即可,即在创建的Thread类的 子类中重写run(),加入线程所要执行的代码。
• 线程在它完整的生命周期中包括新建、就绪、 运行、阻塞和死亡5种状态。
线程的生命周期
– 新建(New):代表线程的对象已经被初始化, 但尚未运行run方法。
– 就绪(Runnable):线程正在运行run方法,但 这只说明线程目前处于的状态。如果系统没有能 力抽出CPU执行时间给线程,线程就“不执 行”,这里的“不执行”不代表“阻塞”或“死 亡”。
多线程技术
• 多线程是这样一种机制,它允许在程序中并 发执行多个指令流,每个指令流都称为一个 线程,线程彼此间互相独立。
多线程技术
• 线程和进程一样拥有独立的执行控制,由操 作系统负责调度,区别在于线程没有独立的 存储空间,而是和所属进程中的其它线程共 享一个存储空间,这使得线程间的通信比进 程简单。
什么是线程
• 代码可以由多个线程共享,也可以不被共享, 这些都和数据是独立的。两个线程如果执行 同一个类的实例代码,则它们可以共享相同 的代码。
什么是线程
• 类似地,数据可以由多个线程共享,也可以 不被共享,这些都和代码是独立的。两个线 程如果共享对一个公共对象的存取,则它们 可以共享相同的数据。
多线程技术的实现
• 在了解了线程的基本概念之后,本节将继续 深入,介绍如何创建线程,如何实现多线程, 线程同步、死锁和调度等等多线程技术。
– 线程的创建 – 如何实现多线程
多线程技术的实现
– 线程同步 – 线程死锁 – 线程调度 – 应用举例——抢硬币
线程的创建
• 为了创建一个新的线程,必须指明这个线程 所要执行的代码,Java是通过类做到这一点 的。作为一个面向对象的程序设计语言, Java提供了java.lang.Thread类来进行多线 程编程,这个类提供了大量的方法给开发人 员控制自己的各个线程,以后的讨论都将围 绕这个类进行。
第10章 多线程
• 学习目标 • 本章要点
•习 题
百度文库习目标
• 在计算机处理任务时,往往需要操作系统同 时处理多个任务,这些任务就由操作系统本 身和CPU来控制。有时也需要自己创建多个 任务来让系统同时完成,这些用户自己定制 的任务都是非常小的程序段,称为线程。本 章介绍线程的基本概念和多线程技术,详细 讲解线程的创建,如何实现多线程,还介绍 线程同步、线程死锁和线程调度等控制技术。
本章要点
• 线程的生命周期 • 多线程技术 • 线程的创建和实现多线程 • 线程的同步和死锁
多线程技术的基本概念
• 多线程是Java程序的一个重要特征,线程本 来是操作系统中的概念,Java将这一概念引 入到程序设计语言中,让开发人员利用线程 机制编写多线程程序,使系统能够同时运行 多个执行体,从而加快程序的响应速度,提 高电脑资源的利用率。本节主要介绍多线程 机制的一些基本概念。