大学教程(从零开始)多线程.ppt

  1. 1、本文档共29页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
8.1线程的基本概念 什么是线程? 线程就是程序中单独顺序的流控制。线程本身不能运行,它只能用于程序中。 线程(thread)就是进程中的一个执行线索。Java虚拟机允许进程中同时执行多个线程。每个线程都有一个优先级。具有较高优先级的线程先执行。   线程是操作系统分配 CPU 时间的基本实体。每一个应用程序至少有一个线程,也可以拥有多个线程。线程是程序中的代码流。多个线程可以同时运行并能共享资源。   线程与进程不同,每个进程都需要操作系统为其分配独立的地址空间,而同一进程中的各个线程是在同一块地址空间中工作。 在 Java 程序中,一些动态效果(如动画的实现、动态的字幕等)常利用多线程技术来实现。 什么是多线程? 多线程则指的是在单个程序中可以同时运行多个不同的线程执行不同的任务. 8.1.1线程的生命周期 线程的生命周期:一个线程从创建到死亡的过程。 线程的生命周期可分为五个状态: 创建状态 就绪状态 运行状态 阻塞状态 死亡状态 第8章 多线程 * 线程的生命周期 线程的状态转换图: * 线程的生命周期 创建状态 当用new操作符创建一个新的线程对象时,该线程处于创建状态。 处于创建状态的线程只是一个空的线程对象,系统不为它分配资源 此时只能调用start方法启动该线程,调用其它任何方法都会产生线程非法状态异常。 * 线程的生命周期 2. 就绪状态 执行线程的start()方法将为线程分配必须的系统资源,安排其运行,并调用线程体—run()方法,这样就使得该线程处于可运行( Runnable )状态。 这一状态并不是运行中状态(Running ),因为线程也许实际上并未真正运行。 * 线程的生命周期 3. 运行状态 是某个就绪状态的线程获得CPU资源,正在运行, 如果有更高优先级的线程进入就绪状态,则该线程就被迫放弃对CPU的控制进入就绪状态,可使用yield ()方法主动放弃CPU,也可能由于执行结束或执行stop()方法进入死亡状态. * 线程的生命周期 4.阻塞状态 当发生下列事件时,处于运行状态的线程会转入到阻塞状态。 调用了sleep()方法; 线程调用wait方法所等待的特定条件的满足 线程输入/输出阻塞 * 线程的生命周期 从阻塞状态恢复到就绪状态三种途径: 处于睡眠状态的线程在指定的时间过去后 如果线程在等待某一条件,另一个对象必须通过notify()或notifyAll()方法通知等待进程条件的改变 如果线程是因为输入/输出阻塞,输入/输出完成 * 8.1.2线程的优先级 1. 线程的优先级及其设置 设置优先级是为了在多线程环境中便于系统对线程的调度,优先级高的线程将优先执行 一个线程的优先级设置遵从以下原则: 线程创建时,子进程继承父进程的优先级 线程创建后,可通过调用setPriority()方法改变优先级。 线程的优先级是1-10之间的正整数。 1 - MIN_PRIORITY, 10 – MAX_PRIORITY 5- NORM_PRIORITY * 线程的优先级 线程的调度策略 线程调度器选择优先级最高的线程运行。但是,如果发生以下情况,就会终止线程的运行 线程体中调用了yield()方法,让出了对CPU的占用权 线程体中调用了sleep()方法, 使线程进入睡眠状态 线程由于I/O操作而受阻塞 另一个更高优先级的线程出现。 在支持时间片的系统中,该线程的时间片用完。 * 线程的生命周期 5. 死亡状态 当线程的run方法执行结束后,该线程自然 死亡。 * 8.2线程的实现 在Java中通过run方法为线程指明要完成的任务,有两种技术来为线程提供run方法。 继承Thread类并重载run方法。 通过定义实现Runnable接口的类进而实现run方法。 * 线程的实现 继承Thread类并重载run方法。 Thread类:是专门用来创建线程和对线程进行操作的类。Thread中定义了许多方法对线程进行操作。 Thread类在缺省情况下run方法是空的。可以通过继承Thread类并重写Thread类的run方法实现用户线程。 * 线程的实现 继承Thread类并重载run方法。 总体结构如下: public class MyThread extends Thread { public void run() { … … } } MyThread t = new MyThread(); t. start(); * 线程的实现 执行Runnable接口的类实现run方法。 通过建立一个实现了R

文档评论(0)

junjun37473 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档