Java语言程序设计教程第2版 教学课件 ppt 作者 邱桃荣 主编 第11章 Java多线程

上传人:E**** 文档编号:89243417 上传时间:2019-05-21 格式:PPT 页数:50 大小:437.01KB
返回 下载 相关 举报
Java语言程序设计教程第2版 教学课件 ppt 作者 邱桃荣 主编 第11章 Java多线程_第1页
第1页 / 共50页
Java语言程序设计教程第2版 教学课件 ppt 作者 邱桃荣 主编 第11章 Java多线程_第2页
第2页 / 共50页
Java语言程序设计教程第2版 教学课件 ppt 作者 邱桃荣 主编 第11章 Java多线程_第3页
第3页 / 共50页
Java语言程序设计教程第2版 教学课件 ppt 作者 邱桃荣 主编 第11章 Java多线程_第4页
第4页 / 共50页
Java语言程序设计教程第2版 教学课件 ppt 作者 邱桃荣 主编 第11章 Java多线程_第5页
第5页 / 共50页
点击查看更多>>
资源描述

《Java语言程序设计教程第2版 教学课件 ppt 作者 邱桃荣 主编 第11章 Java多线程》由会员分享,可在线阅读,更多相关《Java语言程序设计教程第2版 教学课件 ppt 作者 邱桃荣 主编 第11章 Java多线程(50页珍藏版)》请在金锄头文库上搜索。

1、第11章 Java多线程,2,学习导读,多线程机制使得程序的多个子任务能够“同时”执行 多线程是指同时存在几个执行体,按几条不同的执行线索共同工作的情况。Java语言实现了对多线程的支持,它使得编程人员可以很方便地开发出能同时处理多个任务的功能强大的应用程序。 在Java语言中,不仅语言本身有多线程的支持,可以方便地生成多线程的程序,而且运行环境也利用多线程的应用程序并发提供多种服务。 本章介绍如何实现Java语言中的多线程机制,3,课程结构,11.1 Java中的线程 11.2 Thread和Runnable 11.3 多线程并发程序 11.4 线程池 11.5 线程的同步,4,11.1 J

2、ava中的线程,文件,输入输出装置,各种系统资源,数据区段,程序区段,只有一个地方在执行,文件,输入输出装置,各种系统资源,程序区段,同时有数个地方在执行,传统的进程,多线程的任务,5,11.1 Java中的线程,多线程的优势: 减轻编写交互频繁、涉及面多的程序的困难. 程序的吞吐量会得到改善. 由多个处理器的系统,可以并发运行不同的线程.(否则,任何时刻只有一个线程在运行),6,11.1 Java中的线程,一、 什么是线程? 1、进程 在程序开始投入运行时,系统从程序入口开始按语句的顺序(其中包括顺序、分支和循环)完成相应指令直至结尾,从出口退出,同时整个程序结束。这样的语句结构称之为进程,

3、或者说进程就是程序在处理机中的一次运行。 一个进程既包括其所要执行的指令,也包括了执行指令所需的任何系统资源,如CPU、内存空间、I/O端口等,不同进程所占用的系统资源相对独立。,7,11.1 Java中的线程,2、线程 线程是程序的顺序控制流,是比进程单位更小的执行单位,在形式上同进程十分相似都是用一个顺序执行的语句序列来完成特定的功能。一个简单的线程也有开始、顺序执行、和结束。在一个线程的运行时间的任何一段时间内,存在一个简单的执行点。但是,一个线程本身不是程序,一个线程自身是不能自己运行,必须栖身于某一进程之中,由进程触发执行,在程序内运行。,8,11.1 Java中的线程,、线程与进程

4、的区别: 多个进程的内部数据和状态都是完全独立的,而多线程是共享一块内存空间和一组系统资源,有可能互相影响. 线程本身的数据通常只有寄存器数据,以及一个程序执行时使用的堆栈,所以线程的切换比进程切换的负担要小。 在系统资源的使用上,属于同一进程的所有线程共享该进程的系统资源,但是线程之间切换的速度比进程切换要快得多。,9,11.1 Java中的线程,、多线程 有的时候,并不是只有一个简单顺序线程。在同一个时间内,可以在一个程序内运行多个线程实现多个任务。例如:浏览器就是一个多线程的典型应用。在一个浏览器中,下载一个applet小程序或图象,播放音乐或视频、用户可以翻滚浏览页面等多个任务。 Ja

5、va语言把线程或执行环境(execution context)当作一种拥有自己的程序代码和数据的对CPU的封装单位,由虚拟机提供控制。Java类库中的类java.lang.Thread允许创建并控制所创建的线程。,10,11,11.1 Java中的线程,二、线程的状态和生命周期 1新建 2就绪 3运行 4阻塞 5死亡,12,11.1 Java中的线程,1新建 当一个Thread类或其子类的对象被声明并创建时,新生的线程对象处于新建状态。此时它已经有了相应的内存空间和其他资源,并已被初始化。 2就绪 处于新建状态的线程被启动后,将进入线程队列排队等待CPU时间片,此时它已经具备了运行的条件,一旦

6、轮到它来享用CPU资源时,就可以脱离创建它的主线程独立开始自己的生命周期了。另外,原来处于阻塞状态的线程被解除阻塞后也将进入就绪状态。,13,11.1 Java中的线程,3运行 当就绪状态的线程被调度并获得处理器资源时,便进入运行状态。 run方法 每一个Thread类及其子类的对象都有一个重要的run()方法,当线程对象被调度执行时,它将自动调用本对象的run()方法,从第一句开始顺序执行。run()方法定义了这一类线程的操作和功能。,14,11.1 Java中的线程,4阻塞 一个正在执行的线程如果在某些特殊情况下,如被人为挂起或需要执行费时的输入输出操作时,将让出CPU并暂时中止自己的执行

7、,进入阻塞状态。 阻塞时它不能进入排列队列,只有当引起阻塞的原因被消除时,线程才可以转入就绪状态,重新进到线程队列中排队等待CPU资源,以便从原来终止处开始继续执行。,15,11.1 Java中的线程,5死亡 处于死亡状态的线程不具有继续运行的能力。线程死亡的原因有两个: 一个是正常运行的线程完成了它的全部工作,即执行完了run()方法的最后一个语句并退出; 另一个是线程被提前强制性地终止,如通过执行stop()方法或destroy()终止线程。,16,11.1 Java中的线程,三、线程调度与优先级 处于就绪状态的线程排队等候处理器资源 线程先分配CPU资源的先后,称为线程调度 为了方便线程

8、调度,多线程系统会给每个线程自动分配一个线程的优先级,任务较紧急重要的线程,其优先级就较高;相反则较低 在Java系统中,线程调度采用优先级基础上的“先到先服务”原则,17,11.1 Java中的线程,四、线程组 在Java中,线程组是类ThreadGroup的对象,每个线程Thread都隶属于惟一一个线程组 这个线程组在线程创建时指定并在线程的整个生命期内都不能更改 用户可以通过调用包含 ThreadGroup 类型参数的 Thread 类构造函数来指定线程所属的线程组。,18,11.1 Java中的线程,在创建线程时显式地制定线程组,采用下述三种构造方法之一: 1)Thread(Threa

9、dGroup,Runnable) 2)Thread(ThreadGroup,String) 3)Thread(ThreadGroup,Runnable,String) 若没有指定,则线程默认地隶属于名为system的系统线程组 例如,下面的语句创建了一个名为myThreadGroup的线程组: ThreadGroup myThreadGroup = new ThreadGroup(“my Group of Threads”),19,11.1 Java中的线程,线程组的作用: Java允许对一个线程组中的所有线程同时进行操作,比如可以通过调用线程组的相应方法来设置其中所有线程的优先级,也可以启动

10、或阻塞其中的所有线程 Java的线程组机制的另一个重要作用是线程安全。线程组机制允许通过分组来区分有不同安全特性的线程,对不同组的线程进行不同的处理,还可以通过线程组的分层结构来支持不对等安全措施的采用,20,11.1 Java中的线程,对线程的综合支持是Java技术的一个重要特色.它提供了thread类、监视器和条件变量的技术. 虽然Macintosh,Windows NT,Windows 9等操作系统支持多线程,但若要用C或C+编写多线程程序是十分困难的,因为它们对数据同步的支持不充分.,21,11.2 Thread和Runnable,Java中编程实现多线程应用有两种途径: 创建用户自己

11、的线程子类, 在用户自己的类中实现Runnable接口,22,11.2 Thread和Runnable,Thread类 1、构造函数 public Thread();这个方法创建了一个默认的线程类的对象。 Public Thread(Runnable target);这个方法在上一个构造函数的基础上,利用一个实现了Runnable接口参数对象Target中所定义的run()方法,以便初始化或覆盖新创建的线程对象的run()方法。 public Thread(String name);利用一个String类的对象name为所创建的线程对象指定了一个名称4,23,11.2 Thread和Runna

12、ble,Thread类 1、构造函数 Public Thread(ThreadGroup group, Runnable target)这个方法利用给出的ThreadGroup类的对象为所创建的线程指定了所属的线程组。 public Thread(ThreadGroup group, String name); 这个方法在第三个构造函数创建了一个指定了一个字符串名称的线程对象的基础上,利用给出的ThreadGroup类的对象为所创建的线程指定了所属的线程组。 public Thread(ThreadGroup group, Runnable target , String name);这个方法

13、综合了上面提到的几种情况,创建了一个属于group的线程组,用target对象中的run()方法初始化了本线程中的run()方法,同时还为线程指定了一个字符串名。,24,11.2 Thread和Runnable,Thread类 2、优先级 Thread类有三个有关线程优先级的静态常量: public static final int MAX_PRIORITY public static final int MIN_PRIORITY public static final int NORM_PRIORITY,25,11.2 Thread和Runnable,Thread类 2、优先级 对应一个新建

14、线程,系统会根据如下的原则为其自定义的优先级: 新建线程将继承创建它的父线程的优先级。 一般情况下,主线程具有普通优先级。 另外,用户可以通过调用Thread类的方法setPriority()来修改系统自动设定的线程优先级,使之符合程序的特定需要,26,11.2 Thread和Runnable,Runnable接口 Runnable接口只有一个方法run(),所有实现Runnable接口的用户类都必须具体实现这个run()方法 当线程被调度并转入运行状态时,它所执行的就是run()方法中规定的操作。 一个实现Runnable接口的类实际上定义了一个主线程之外新线程的操作,,27,11.2 Th

15、read和Runnable,1. 继承类Thread public class mythread extends Thread 2. public class mythread extends Applet implements Runnable (小应用或已经是某个类的子类时) 3. 上述两种方法中都可用类Thread产生线程的对象 Thread newthread; 4. 创建并启动线程 newthread=new Thread(this); newthread.start();,28,11.2 Thread和Runnable,5. run方法是运行线程的主体,启动线程时,由java直接调

16、用 public void run() 6.停止线程,调用线程的stop() newthread.stop() 7 sleep方法的作用,暂停线程的执行,让其它线程得到机会,sleep要丢出异常,必须抓住. Trysleep(100)catch(InterruptedException e),29,11.2 Thread和Runnable,8.其它常用的方法 isAlive :判断线程目前是否正在执行状态中 if(newthread.isAlive() newthread.stop(); resume:要求被暂停得线程继续执行 suspend:暂停线程的执行 join:等待线程执行完毕 thatThread.join();被等待的那个线程不结束,当前线程就一直等待. yield:将执行的权力交给其它线程,自己到队列的最后等待.,30,11.2 Thread和Runnable,11. 线程的状态,31,11.2 Thread和Runnable,多线程并发程序 如前所述,在程序中实现多线程并发程序有两个途径: 一

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号