线程与多线程(11).ppt_第1页
线程与多线程(11).ppt_第2页
线程与多线程(11).ppt_第3页
线程与多线程(11).ppt_第4页
线程与多线程(11).ppt_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

线程与多线程 Java中的线程线程的生命周期线程调度与优先级Java中的线程类与Runnable接口如何实现多线程线程同步Wait notify notifyAll 线程的interrupt 方法 1 Java中的线程 程序 进程与线程程序是一段静态的代码 它是应用软件执行的蓝本 进程就是程序的一次动态执行过程 它对应了从代码加载 执行至执行完毕的一个完整过程 这个过程也就是进程本身从产生 发展至消亡的过程 线程是比进程更小的执行单位 一个进程在其执行过程中 可以产生多个线程 形成多条执行线索 每条线索 即每个线程也有它自身的产生 存在和消亡的过程 也是一个动态的概念 线程与进程一样都是控制流程 但比进程更容易控制和销毁 因为涉及的管理资源更少 多线程是指同时存在几个执行体 按几条不同的执行线索共同工作的情况 它使得编程人员可以很方便地开发出具有多线程功能 能同时处理多个任务的功能强大的应用程序 每个Java程序都有一个默认的主线程 对于应用程序 主线程是main 方法执行的线索 对于Applet 主线程是浏览器加载并执行Java小程序 要实现多线程 必须在主线程中创建新的线程对象 Java语言使用Thread类及其子类的对象来表示线程 线程的例子 见WithoutThread javaWithThread java 每个线程在生成后到消失之前总是处在以下四种状态之一 2 线程的生命周期 新生 新建 就绪 线程生成后立即进入这个状态 即执行生成线程的new语句之后 此时它已有了相应的内存空间和其他资源 调用start 方法后 线程进入可运行状态 可运行当准备就绪的线程被调度并获得处理资源时 便进入运行状态 每一个Thread类及其子类的对象都有一个重要的run 方法 当线程对象被调度执行时 它将自动调用线程的run 方法 run 方法定义了这个线程的操作和功能 暂停 阻塞 发生下列事件之一时进入这种状态 线程本身或另一线程调用suspend 方法线程调用对象的wait 方法线程本身调用sleep 方法线程等待某个I O操作完成线程与另一个线程join 线程在暂停状态时不会运行 发生下列暂停事件的相反事件时线程回到可运行状态 争夺CPU某线程暂停时 另一线程调用它的resume 方法线程因调用一个对象的wait 方法受阻 该对象的notify 或notifyAll 方法被调用时线程睡眠时 指定的睡眠时间到了线程因I O受阻 指定的I O操作已完成提示 suspend 方法和resume 方法已作废 停止 死亡 线程执行完成或另一线程调用stop 方法使其停止时进入这种状态 3 线程调度与优先级 Java为每个线程都赋予一个优先级数值 多个线程争夺CPU时 优先级高的线程有优先权 对于优先级相同的线程 则遵循队列的 先进先出 原则 4 Java的线程类与Runnable接口 生成新线程的方法有两种 生成作为Thread子类的新类声明一个实现Runnable接口的类 4 1Thread类 Thread类综合类Java程序中一个线程需要拥有的属性和方法 A 构造函数 两种操作 publicThread 创建一个线程对象publicThread Runnabletarget 创建线程对象 参数target称为被创建线程的目标对象 创建目标对象target的类负责实现Runnable接口 给出该接口中run 方法的方法体 在方法体中给出该线程的操作和功能 B 线程优先级 Thread类有3个有关线程优先级的静态常量 MIN PRIORITY 最小优先级 通常为1MAX PRIORITY 最高优先级 通常为10NORM PRIORITY 普通优先级 缺省数值为5 制定优先级的方法对应一个新建线程 系统会遵循如下的原则为其指定优先级 新建线程将继承创建它的父线程的优先级 父线程是指执行创建新线程对象语句的线程 它可能是程序的主线程 也可能是某一用户自定义的线程 一般情况下 主线程具有普遍优先级系统可通过调用Thread类的setPriority inta 方法来修改系统自动设定的线程优先级 a取值是 MIN PRIORITY MAX PRIORITYNORM PRIORITY C 其他主要方法start 方法 启动线程run 方法 Thread类的run 方法和Runnable接口中的run 方法功能和作用相同 定义线程对象被调度之后所执行的操作 系统的Thread类中 run 方法没有具体内容 所以用户需要创建自己的Thread类的子类 并重写run 方法来覆盖原来的run 方法 sleep方法 使线程休眠一段时间 暂时放弃处理器资源 休眠时间长短由sleep 方法的参数决定 sleep intmillsecond millsecond是毫秒为单位的休眠时间sleep intmillsecond intnanosecond nanosecond是以纳秒为单位的休眠时间currentThread 方法 判断目前正在占用CPU的那个线程 4 2Runnable接口 Runnable接口只有一个方法run 所有实现Runnable接口的用户类都必须具体实现这个run 方法 为它提供方法体并定义具体操作 Runnable接口中的run 方法可以被系统自动识别和运行 5 如何实现多线程 实现多线程有两个途径 创建Thread类的子类实现Runnable接口关键性操作有两个 1 定义run 方法 2 在适当时候建立用户线程实例 5 1用Thread类的子类创建线程 生成作为Thread子类的新类 生成Thread子类时 这个子类应定义自己的run 方法来覆盖Thread类的run 方法publicclassWithThread ThreadedPseudoIOpseudo newThreadedPseudoIO pseudo start classThreadedPseudoIOextendsThread Example19 1 java 5 2实现runnable接口 声明一个实现Runnable接口的类 用new语句生成这个类的实例用new语句生成Thread实例调用线程实例的start 方法publicclassWithThread ThreadedPseudoIOpseudo newThreadedPseudoIO Threadthread newThread pseudo thread start classThreadedPseudoIOimplementsRunnable Example19 3 java 6 线程同步 线程同步是避免同时访问同一数据造成数据混乱的方法 关键字synchronized实现同步 一次只让一个线程运行 synchronizedvoiddeposit 见Deposit javaExample19 9 java 7 wait notify notifyAll wait 方法使调用线程等待 直到发生超时或另一线程调用同一对象的notify 或notifyAll 方法 notify 方法只唤醒一个等待线程 notifyAll 方法唤醒所有的等待线程 见NoWaitPandC java PandC javaExample19 10 java 8 线程的interrupt

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论