第十二章 Java多线程编程.ppt_第1页
第十二章 Java多线程编程.ppt_第2页
第十二章 Java多线程编程.ppt_第3页
第十二章 Java多线程编程.ppt_第4页
第十二章 Java多线程编程.ppt_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

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

文档简介

第12讲线程技术JavaMulti Threads 计算机与通信学院 本章主要内容 一 线程及多线程的概念 程序 program 是对数据描述与操作的代码的集合 是应用程序执行的脚本 是静态的 一 线程及多线程的概念 进程 process 是程序的一次完整的执行过程 是操作系统运行程序的基本单位 系统从程序入口开始按语句的顺序 其中包括顺序 分支和循环 完成相应指令直至结尾 从出口退出 同时整个程序结束 是动态的 一个进程既包括其所要执行的指令 也包括了执行指令所需的任何系统资源 如CPU 内存空间 I O端口等 不同进程所占用的系统资源相对独立 一 线程及多线程的概念 多任务是指在一个系统中可以同时运行多个程序 即有多个独立运行的任务 多个进程 每一个任务对应一个进程 例如 边听音乐边编写Java程序 一 线程及多线程的概念 线程是比进程更小的运行单位 是程序中单个顺序的流控制 每个线程也有它自身的产生 存在和消亡的过程 是一个动态的概念 在执行的任何时刻 只有一个执行点 一 线程及多线程的概念 多线程 Multi Threads 多线程是相对于单线程而言的 指的是在一个程序中可以定义多个线程并同时运行它们 每个线程可以执行不同的任务 与多进程不同的是 同类多线程共享一块内存空间和一组系统资源 所以 系统创建多线程花费单价较小 因此 也称线程为轻负荷进程 例如 在线看电影 播放程序在播放的同时也在下载 一 线程及多线程的概念 线程与进程的区别线程并不是一个完整的程序 它自己本身并不能独立运行 只能包含在程序中 只能在进程内部执行 process process 一 线程及多线程的概念 线程与进程的区别多个进程的内部数据和状态都是完全独立的 线程本身的数据通常只有寄存器数据 以及一个程序执行时使用的堆栈 所以线程的切换比进程切换的负担要小 属于同一进程的所有线程共享该进程的内存空间和一组系统资源 所以线程之间切换的速度比进程切换要快得多 二 Java中的线程技术 Java的线程是通过软件包java lang中定义的类Thread来实现的 当生成一个Thread类的对象之后 就产生了一个线程 通过该对象 可以启动线程 终止线程 或者暂时挂起线程等 二 Java中的线程技术 Thread在Java包中的层次关系 所有已实现的接口 RunnableThread类的原型 publicclassThreadextendsObjectimplementsRunnable 二 Java中的线程技术 Runnable接口 java lang RunnableRunnable的原型 publicinterfaceRunnable voidrun 二 Java中线程的创建 二 Java中线程的创建 二 Java中线程的创建 二 Java中线程的创建 二 Java中线程的创建 通过扩展Thread类创建线程 方法一1 创建Thread类的子类 2 重写Thread类中的run 方法 3 创建子类的对象 4 调用线程对象的start 方法 例子 ThreadTest java 二 Java中线程的创建 通过扩展Thread类创建线程 方法一1 创建Thread类的子类 2 重写Thread类中的run 方法 3 创建子类的对象 4 调用线程对象的start 方法 例子 ThreadTest java 二 Java中线程的创建 例子 ThreadTest java 二 Java中线程的创建 实现Runnable接口创建线程 方法二1 创建实现接口Runnable的类 2 实现接口Runnable中的run 方法 3 创建实现了Runnable接口的类对象 4 将3中创建的对象作为参数 创建Thread类对象 5 调用线程对象的start 方法 例子 AppletThreadTest java 二 Java中线程的创建 二 Java中线程的创建 例子 RunnableThreadTest java 二 线程的状态和生命周期 线程的状态 二 线程的状态和生命周期 线程的生命周期1 新建2 就绪3 运行4 阻塞5 死亡 二 线程的状态和生命周期 1 新建当一个Thread类或其子类的对象被声明并创建时 新生的线程对象处于新建状态 此时它已经有了相应的内存空间和其他资源 并已被初始化 2 就绪处于新建状态的线程被启动后 将进入线程队列排队等待CPU时间片 此时它已经具备了运行的条件 一旦轮到它来享用CPU资源时 就可以脱离创建它的主线程独立开始自己的生命周期了 另外 原来处于阻塞状态的线程被解除阻塞后也将进入就绪状态 二 线程的状态和生命周期 3 运行当就绪状态的线程被调度并获得处理器资源时 便进入运行状态 run 方法每一个Thread类及其子类的对象都有一个重要的run 方法 当线程对象被调度执行时 它将自动调用本对象的run 方法 从第一句开始顺序执行 run 方法定义了这一类线程的操作和功能 二 线程的状态和生命周期 4 阻塞一个正在执行的线程如果在某些特殊情况下 如被人为挂起或需要执行费时的输入输出操作时 将让出CPU并暂时中止自己的执行 进入阻塞状态 阻塞时它不能进入排列队列 只有当引起阻塞的原因被消除时 线程才可以转入就绪状态 重新进到线程队列中排队等待CPU资源 以便从原来终止处开始继续执行 二 线程的状态和生命周期 5 死亡处于死亡状态的线程不具有继续运行的能力 线程死亡的原因有两个 一个是正常运行的线程完成了它的全部工作 即执行完了run 方法的最后一个语句并退出 另一个是线程被提前强制性地终止 如通过执行stop 方法或destroy 终止线程 二 线程调度与优先级 二 线程调度与优先级 调度就是分配CPU资源 确定线程的执行顺序 Java采用抢占式调度方式 即高优先级线程具有剥夺低优先级线程执行的权力 如果一个低优先线程正在执行 这时出现一个高优先级线程 那么低优先级线程就只能停止执行 放弃CPU 推回到等待队列中 等待下一轮执行 而让高优先级线程立即执行 如果线程具有相同的优先级 则按 先来先服务 的原则调度 二 线程调度与优先级 问题 如果高优先级抢占了低优先级的线程后 一直占据CPU 低优先级的线程如何获得控制权 有两个方法可以改变这种现象 一是调用sleep 方法 暂时进入睡眠状态 从而让出CPU 使有相同优先级线程和低优先级线程有执行的机会 二是调用yield 而放弃CPU 这时和它有相同优先级的线程就有执行的机会 三 多线程并发程序 二 线程组 ThreadGroup 二 守护线程 Deamon 三 多线程并发程序 线程同步 在多线程的程序中 当多个线程并发执行时 由于线程的相对执行顺序是不确定的 当多个并发线程需要共享程序的代码区域和数据区域时 由于各线程的执行顺序是不确定的 因此执行的结果就带有不确定性 这就要求线程同步例子 MultiThread java 三 多线程并发程序 线程同步 临界区和线程同步在多线程程序设计中 我们将程序中那些不能被多个线程并发执行的代码段称为临界区 当某个线程已处于临界区时 其他的线程就不允许再进入临界区 实现方法 则是在共享代码之前加入synchronized段 把共享代码包含在synchronized段中 格式如下 synchronized objectname statement其中 objectname用于指出该临界区的监控对象 是可选项 statem

温馨提示

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

评论

0/150

提交评论