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