chapter多线程.ppt

  1. 1、本文档共79页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
chapter多线程.ppt

第11章 多线程 本章知识点 线程的概念 线程的状态与生命周期 线程优先级与线程调度策略 线程的创建和执行 利用Thread类创建线程 利用Runnable接口创建线程 线程同步 使用Synchonized关键字同步语句块 使用Synchonized关键字同步方法 消费者和生产者模型的实现 11.1 线程的概念 Java语言支持多线程机制 可开发出处理多个任务的功能强大的应用程序。 多线程任务的应用举例 浏览器 任务1:下载 任务2:浏览网页 服务器端的程序大多数都是多线程的。 11.1 线程的概念 程序、进程与线程的概念 程序(program):一段静态代码。 进程(process):程序一次动态执行的过程(它对应着从代码加载、执行、到执行完毕的一个完整过程,这个过程也是进程本身从产生、发展到消亡的过程)。进程由操作系统来管理。 线程(thread):进程中可独立执行的子任务,一个进程可以含有一个或多个线程,每个线程都有一个唯一的标识符。 多线程:当需要在一个程序中同时执行几段代码,以完成不同的任务时,就会用多线程技术。多线程由程序负责管理。 11.1 线程的概念 多线程的实现原理 单CPU的机器不存在严格意义上的并发,CPU一个时间段只能执行一条指令。 操作系统的调度为多个程序分配时间片,使程序轮流执行。因为时间以毫秒或微秒为单位,所以用户感觉程序是并发执行的。 11.1 线程的概念 进程和线程的区别 进程空间大体分为数据区,代码区,栈区,堆区。多个进程的内部数据和状态都是完全独立的。 线程共享进程的数据区,代码区,堆区;只有线程间的栈区是独立的。 线程的优缺点 优点:共享的数据使线程之间的通信更加简单而有效,创建和销毁线程的开销要比进程小得多。 缺点:危险,容易出错。 11.2 线程的状态与生命周期 一个线程的生命周期通常要经历5个状态 创建状态(born) 就绪状态(ready) 运行状态(running) 阻塞状态(blocked,waiting,sleeping) 死亡状态(dead) 11.2 线程的状态与生命周期 1. 创建状态(Born) Java使用Thread类及其子类的对象来表示线程。 当一个Thread类或其子类的对象被创建时,就处于新建状态。   Thread myThread = new Thread( ); 11.2 线程的状态与生命周期 2. 就绪状态(Ready) 也称作可运行状态(Runnable)。 处于新建状态的线程,通过调用start()方法执行后,就处于就绪状态。 Thread myThread = new Thread( ); myThread.start( ); 处于就绪状态的线程,将进入线程队列排队等待分配CPU时间片。 原来处于阻塞状态的线程,被解除阻塞后也将进入就绪状态。 11.2 线程的状态与生命周期 3. 运行状态(Running) 当就绪状态的线程被调度并获得处理器资源时,便进入运行状态。 处于运行中的线程,因调用了方法yield()会自动放弃CPU而进入就绪状态。从而使其他就绪的线程有运行的机会。 11.2 线程的状态与生命周期 4. 阻塞状态(Blocked) 一个正在运行的线程在某些特殊情况下,如果被人为挂起或需要执行费时的输入输出操作时,将让出CPU并暂时中止自己的执行,进入阻塞状态(包括blocked、waiting和sleeping状态) 。 阻塞时线程不能进入排队队列 只有当引起阻塞的原因被消除时,线程才可以转入就绪状态,重新进到线程队列中排队等待CPU资源,以便从原来终止处开始继续运行。 11.2 线程的状态与生命周期 5. 死亡状态(Dead) 处于死亡状态的线程不具有继续运行的能力。 线程死亡的原因:执行完run()方法体的最后一个语句并退出。 11.3 线程优先级与线程调度策略 1. 线程的优先级 每个线程都有一个优先级(priority),数值范围:1~10。 Thread.MIN_PRIORITY(常量1, 最低优先级) Thread.NORM_PRIORITY(常量值5, 默认优先级) Thread.MAX_PRIORITY(常量10, 最高优先级) 具有较高优先级的线程,完成的任务较紧急,因而应优先于较低优先级的线程分配处理器时间。 每个新创建线程均继承创建线程的优先级。 线程的优先级的设置或读取 用setPriority(int priority)设置线程的优先级 用getPriority()方法获得线程的优先级 11.3 线程优先级与线程调度策略 2. 线程的调度策略 线程调度器(thread schedule

文档评论(0)

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

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

1亿VIP精品文档

相关文档