Jav最新实用教程 第宄章多缆程
Java最新实用教程 第九章 多线程
Jav最新实用教程 学习目的 ■掌握多线程的基础知识 掌握线程的生命周期 了解线程的优先级 了解用线程制作动画的方法 学习重点: 多线程的基础知识 ■线程的生命周期 2021年2月20日星期六
Java最新实用教程 2021年2月20日星期六 2 ⚫ 学习目的: ▪ 掌握多线程的基础知识 ▪ 掌握线程的生命周期 ▪了解线程的优先级 ▪了解用线程制作动画的方法 ⚫ 学习重点: ▪多线程的基础知识 ▪线程的生命周期
Jav最新实用教程 第九章多线程 本章提要: 1.多线程编程基础 线程的基本概念、线程模型、 Thread类、 Runnable接口、 线程间的数据共享、多线程的同步控制与通信和守护线程 2线程的生命周期 线程的几种基本状态、死锁问题和控制线程的生命 3线程的优先级 4用于制作动画的线程 动画程序框架、帧的画法、避免闪动与使用图片 2021年2月20日星期六
Java最新实用教程 2021年2月20日星期六 3 第九章 多线程 本章提要: 1. 多线程编程基础 线程的基本概念、线程模型、Thread类、Runnable接口、 线程间的数据共享、多线程的同步控制与通信和守护线程 2.线程的生命周期 线程的几种基本状态、死锁问题和控制线程的生命 3.线程的优先级 4.用于制作动画的线程 动画程序框架、帧的画法、避免闪动与使用图片
Jav最新实用教程 91多线程编程基础 Java与现在流行的通用目的编程语 言相比有个独特之处,它使用程序员可 以使用的并发原语。程序员指定在程序 中包含要执行的多个线程,每个线程设 计成程序的一部分,并且能与其他线程 并发执行,这种功能称为多线程
Java最新实用教程 9.1 多线程编程基础 Java与现在流行的通用目的编程语 言相比有个独特之处,它使用程序员可 以使用的并发原语。程序员指定在程序 中包含要执行的多个线程,每个线程设 计成程序的一部分,并且能与其他线程 并发执行,这种功能称为多线程
Jav最新实用教程 911线程的基本概念 ●应用程序 存储在计算机系统的存储空间中的一段静态的代码序列 ●进程 处在可执行状态中的应用程序称为进程。从用户角度来 看,进程是应用程序的一个执行过程。从操作系统核心角度来 看,进程代表的是操作系统分配的内存、CPU时间片等资源的 基本单位,是为正在运行的程序提供的运行环境 ●线程 Java语言中定义的线程( Thread)包括一个内存入口点 地址、一个出口点地址以及能够顺序执行的代码序列。但线程 不能够单独执行,它必须运行在处于活动状态的应用程序进程 中,因此可以定义线程是程序内部的具有并发性的顺序代码流 2021年2月20日星期六
Java最新实用教程 2021年2月20日星期六 5 ⚫应用程序 存储在计算机系统的存储空间中的一段静态的代码序列 ⚫进程 处在可执行状态中的应用程序称为进程。从用户角度来 看,进程是应用程序的一个执行过程。从操作系统核心角度来 看,进程代表的是操作系统分配的内存、CPU时间片等资源的 基本单位,是为正在运行的程序提供的运行环境。 ⚫线程 Java语言中定义的线程(Thread)包括一个内存入口点 地址、一个出口点地址以及能够顺序执行的代码序列。但线程 不能够单独执行,它必须运行在处于活动状态的应用程序进程 中,因此可以定义线程是程序内部的具有并发性的顺序代码流 。 9.1.1线程的基本概念
Jav最新实用教程 912Java的线程模型 ●多线程模型的同步方式 所有的对象都有充当互斥锁的内置侦听器。在给定的时刻 任何侦听器只能由一个线程拥有。通过使用 synchronized关键 字对方法进行修饰,可以启用锁定特性。在调用同步方法时, 该对象就被锁定,而试图访问该对象的其他线程就只能等待。 ■Java对同步的支持可以通过waiO、noif0和 notifyAllo方法 来实现 ●线程类( Thread) 线程类封装了所有需要的线程操作控制。必须很清楚地区 分线程对象和运行线程,线程对象可以看作是运行线程的控制面 板。线程类是控制线程行为的惟一手段。一个Java程序启动后, 就已经有一个线程在运行。可以通过调用 Thread. currentThreado0 方法来查看当前运行的是哪一个线程 例9-1 2021年2月20日星期六
Java最新实用教程 2021年2月20日星期六 6 ⚫多线程模型的同步方式。 ◼所有的对象都有充当互斥锁的内置侦听器。在给定的时刻, 任何侦听器只能由一个线程拥有。通过使用synchronized关键 字对方法进行修饰,可以启用锁定特性。在调用同步方法时, 该对象就被锁定,而试图访问该对象的其他线程就只能等待。 ◼Java对同步的支持可以通过wait()、notify()和notifyAll()方法 来实现。 ⚫线程类(Thread) 线程类封装了所有需要的线程操作控制。必须很清楚地区 分线程对象和运行线程,线程对象可以看作是运行线程的控制面 板。线程类是控制线程行为的惟一手段。一个Java程序启动后, 就已经有一个线程在运行。可以通过调用Thread.currentThread() 方法来查看当前运行的是哪一个线程 例9-1 9.1.2Java的线程模型
Jav最新实用教程 913 Thread类 Thread类的构造函数 ● Public thread( String threadName):用于构造一个名为 threadName的 Thread对象 public thread:则用于构造名为“ Thread-”加上一个数字 的线程,如“ TThread-1”、“ Thread-2”等。 ●Run方法可以在 Thread的子类中覆盖或在 Runnable对象中覆 盖 ●程序通过调用线程的 start方法执行线程,而 start则调用Run 方法。当 start方法启动线程后, start便立即返回到其调用者。 调用者与这一线程并发执行。如果 start方法试图启动一个已经 执行的线程,则会抛出Ⅲ egalThreadstate Exception异常。 2021年2月20日星期六
Java最新实用教程 2021年2月20日星期六 7 Thread类的构造函数: ⚫Public Thread(String threadName):用于构造一个名为 threadName的Thread对象 ⚫public Thread():则用于构造名为“Thread-”加上一个数字 的线程,如“Thread-1”、“Thread-2”等。 ⚫Run方法可以在Thread的子类中覆盖或在Runnable对象中覆 盖。 ⚫程序通过调用线程的start方法执行线程,而start则调用Run 方法。当start方法启动线程后,start便立即返回到其调用者。 调用者与这一线程并发执行。如果start方法试图启动一个已经 执行的线程,则会抛出IllegalThreadStateException异常。 9.1.3Thread类
Jav最新实用教程 93 Thread类 public static native void sleep(long millis) throws InterruptedException:该方法中的mii参数指出当前执 行的线程应休眠多长时间(单位为ms)。线程休眠时不会 竞争处理器,因此处理器便可以运行其他线程 Interrupt方法用于中断一个线程。如果线程已经被中断 该方法便返回true,否则返回 false。程序可以调用 Interrupted方法确定该线程是否被中断。 setName方法用于设置线程的名称; getName方法用于返回线程的名称; tostring方法返回一个包含线程名称、线程优先级和线程 所属线程组的字符串; ● currentThread方法返回一个对当前线程的引用。 2021年2月20日星期六
Java最新实用教程 2021年2月20日星期六 8 ⚫public static native void sleep(long millis) throws InterruptedException:该方法中的millis参数指出当前执 行的线程应休眠多长时间(单位为ms)。线程休眠时不会 竞争处理器,因此处理器便可以运行其他线程。 ⚫Interrupt方法用于中断一个线程。如果线程已经被中断 ,该方法便返回true,否则返回false。程序可以调用 isInterrupted方法确定该线程是否被中断。 ⚫setName方法用于设置线程的名称; ⚫getName方法用于返回线程的名称; ⚫toString方法返回一个包含线程名称、线程优先级和线程 所属线程组的字符串; ⚫currentThread方法返回一个对当前线程的引用。 9.1.3Thread类
Jav最新实用教程 914 Runnable接口 创建新的执行线程的方法: ■创建一个 Thread类的子类,该类重载run方法即可 实现 Runnable接口,并实现run方法。 ● Runnable的使用 使用 Runnable对象的程序会创建一个 Thread对象,并把 Runnable对象与该 Thread对象关联。 TThread类提供了两个构造函 数实现和 runnable对象相关联 public Thread( Runnable runnable Object) runnable Object 对象的ru方法注册为线程开始执行时调用的方法。 public Thread runnable runnableobject, String threadName) 以 threadName为名称构造一个线程,并将参数 runnableobject对象的rn方法注册为线程开始执行时调用的方 法。 例92 2021年2月20日星期六
Java最新实用教程 2021年2月20日星期六 9 ⚫创建新的执行线程的方法: ◼创建一个Thread类的子类,该类重载run方法即可 ◼实现 Runnable 接口,并实现run方法。 ⚫Runnable的使用 使用Runnable对象的程序会创建一个Thread对象,并把 Runnable对象与该Thread对象关联。Thread类提供了两个构造函 数实现和runnable对象相关联 ◼public Thread(Runnable runnableObject):将runnableObject 对象的run方法注册为线程开始执行时调用的方法。 ◼public Thread(Runnable runnableObject,String threadName) :以threadName为名称构造一个线程,并将参数 runnableObject对象的run方法注册为线程开始执行时调用的方 法。 例9-2 9.1.4 Runnable接口
Jav最新实用教程 915线程间的数据共享 ●冲突的产生 如果应用程序是多线程的应用程序,一个Java程序 的多线程之间可以共享数据,就存在两个或更多个线程同 时使用相同且有限的资源的可能性。 冲突的避免 在Java内部内置了一种机制,可防止资源的冲突。 当定义一个类的时候,常常会将类的某些属性声明为 private,并且由函数来访问其内容,同样,可以将某个函 数声明为 synchronized(同步化)来防止冲突的发生。这 样,每个对象就都含有一个机锁,当调用任何 synchronized函数时,对象便被锁定,该对象的所有 synchronized函数都无法再被调用,直到第一个函数执行 完毕并解除锁定为止。 2021年2月20日星期六
Java最新实用教程 2021年2月20日星期六 10 ⚫冲突的产生 如果应用程序是多线程的应用程序,一个Java程序 的多线程之间可以共享数据,就存在两个或更多个线程同 时使用相同且有限的资源的可能性。 ⚫冲突的避免 在Java内部内置了一种机制,可防止资源的冲突。 当定义一个类的时候,常常会将类的某些属性声明为 private,并且由函数来访问其内容,同样,可以将某个函 数声明为synchronized(同步化)来防止冲突的发生。这 样,每个对象就都含有一个机锁,当调用任何 synchronized函数时,对象便被锁定,该对象的所有 synchronized函数都无法再被调用,直到第一个函数执行 完毕并解除锁定为止。 9.1.5 线程间的数据共享