Java语言程序设计(第二版)电子教案贾振华 第13章 多线程.ppt
文本预览下载声明
多线程 第13章 目标 掌握多线程的概念 掌握如何创建线程 了解死锁的概念 了解线程同步 了解使用 wait() 和 notify() 在线程之间进行通信 13.1.1 多线程的概念 程序:静态的计算机高级语言编写的代码。 进程:程序的一次执行。 线程:程序中的部分代码的一次执行过程。 多进程:操作系统中多个程序同时执行。 多线程:程序中多个片断同时执行。 13.1.2 Java中的多线程 Thread类是java.lang包中的一个专门用来创建线程和对线程进行操作的类。这些方法分为: 构造方法。 run()方法。 改变线程状态的方法。 操作线程属性的方法。 13.1.3 线程的状态和生命周期 新建 : 新建的线程处于新建状态 就绪 : 在创建线程后,它将处于就绪状态,等待 start() 方法被调用 执行: 线程在开始执行时进入运行状态 阻塞:在线程等待一个事件时(例如输入/输出操作),就称其处于阻塞状态。 死亡:在 run() 方法已完成执行或其 stop() 方法被调用之后,线程就处于死亡状态。 13.1.4 线程的调度和优先级 Java 中的线程优先级是在 Thread 类中定义的常量 NORM_PRIORITY : 值为 5 MAX_PRIORITY : 值为 10 MIN_PRIORITY : 值为 1 缺省优先级为 NORM_PRIORITY 有关优先级的方法有两个: final void setPriority(int newp) : 修改线程的当前优先级 final int getPriority() : 返回线程的优先级 13.2.1 多线程的实现方法 通过以下两种方法创建 Thread 对象: 1.声明一个 Thread 类的子类,并覆盖 run() 方法。 class mythread extends Thread { public void run( ) {/* 覆盖该方法*/ } } 2.声明一个实现 Runnable 接口的类,并实现 run() 方法。 class mythread implements Runnable{ public void run( ) {/* 实现该方法*/ } } 13.2.2 多线程的控制 1.终止线程 stop()方法。 2.测试线程状态 isAlive()方法。 3.线程的暂停和恢复 sleep() suspend()和resume() join() 13.3.1 多线程的互斥 有时两个或多个线程可能会试图同时访问一个资源 例如,一个线程可能尝试从一个文件中读取数据,而另一个线程则尝试在同一文件中修改数据 在此情况下,数据可能会变得不一致 为了确保在任何时间点一个共享的资源只被一个线程使用,使用了“互斥” 两种方式实现互斥: 使用互斥方法 synchronized void methodA() { } 使用互斥块 synchronized(object) { //要互斥的语句 } 13.3.2 多线程的同步 为避免轮流检测,Java提供了一个线程间通信机制,使用wait()、notify()和notifyAll()方法 。 这些方法仅在 synchronized 方法中才能被调用。 wait()方法告知被调用的线程退出监视器并进入等待状态,直到其他线程进入相同的监视器并调用 notify( ) 方法。 notify( ) 方法通知同一对象上第一个调用 wait( )线程。 notifyAll() 方法通知调用 wait() 的所有线程,具有最高优先级的线程将先运行。 13.3.3 线程的死锁 当两个线程循环依赖于一对同步对象时将发生死锁。例如: 一个线程进入对象ObjA上的监视器,而另一个线程进入对象ObjB上的监视器。如果ObjA中的线程试图调用ObjB上的任何 synchronized 方法,就将发生死锁。 死锁很少发生,但一旦发生就很难调试 总结 1、掌握线程的基本概念 2、掌握线程的状态和生命周期 。 3、可通过两种方式创建线程:继承Thread类、实现Runnable 接口。 4、线程的互斥。 5、线程的同步。 JAVA语言程序设计 新建状态 就绪状态 阻塞状态 运行状态 死亡状态 (课程名称)(章节号) 标题 正文 * *
显示全部