JavaSE9-多线程.ppt

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

* 线程的启动 线程的状态转换 线程的同步 线程的通信 线程的死锁 线程的调度 Java线程 线程的基本概念 线程的基本概念 什么线程(Thread) 程序内部可以独立运行的部分 可以与其它部分并发(同时)运行 类似于公路上的多条车道同时行车 CPU通过分配时间片,来实现多个线程并发运行,类似于“一心多用” 三要素:CPU、代码、数据 CPU 代码 数据 线程的启动 线程 一个线程就是一个java.lang.Thread类的对象 一个线程依赖于一个java.lang.Runnable接口的对象作为目标对象 两种创建线程的方式 继承Thread类或实现Runnable接口 并重写run方法 线程的调用 调用Thread类的构造器创建线程对象 调用线程对象的start方法,即可启动线程 注:线程启动后,会自动用目标对象调用run方法 !!不能用线程对象直接调用run方法 关于线程提供的各种方法及功能,请参考API手册 线程的启动 两种创建方式的比较 方式一:继承Thread类——面向对象的思想 方式二:实现Runnable接口——解决了单一继承的限制 线程的状态转换 线程的主要状态 运行——正常状态 完成——结束状态 阻塞(包括锁定、等待)——非运行状态 在不同的条件下可以相互转换 线程的状态转换 新建 准备 等待 运行 完成 锁定 阻塞 启动 调度 完成 休眠到时 加塞解除 打断 休眠 加塞 等待 通知 打断 同步 解锁 线程的同步 什么是线程同步(synchronize) 又叫线程互斥 多个线程并发访问统一资源时,需要步调协调一致 如同多条车道变为一条车道时,需要协调有序地通过 Java使用监视器(又叫“锁”、“互斥体”)来控制线程的同步 监视器就是一个任意类型的对象 当某个资源(方法或块)加载了监视器后,一个时间只能允许一个线程访问 线程的同步 如何进行同步(方式一) 使用synchronized关键字 两种方式:同步方法和同步块 方式一:同步方法(synchronized作为修饰符) 与方法定义的语法相同,添加synchronized修饰符 此时的监视器为this,即调用该同步方法的那个对象(引用) e.g. synchronized void read(){……} 线程的同步 如何进行同步(方式二) 方式二:同步块(synchronized作为语句) 同步块必须是局部的 必须自定义监视器 语法:synchronized (监视器){[……]} e.g. synchronized (mutex){……} 线程的通信 线程之间如何通信 由同一个监视器控制的多个同步线程之间,可以进行通信 通信可以确保线程之间恰当的运行顺序 用监视器调用wait方法,可以使当前线程进入等待状态 用监视器调用notify方法,可以通知其它线程退出等待状态 用监视器调用notifyAll方法,可以通知其它所有线程退出等待状态 线程的死锁 什么是死锁(Dead Lock) 又叫“饿死”或“死亡拥抱” 线程之间互相等待对方先运行,导致相关线程全部处于等待状态,永远无法运行 通常是由于监视器设置不当造成的 必须强行中断才能解决 在编程中要尽量避免 线程的调度 如何进行线程的调度 通过调度,可以改变线程的优先级 优先级的高低,在一定程度上决定了占用CPU时间片的机会大小 调用Thread类的yield静态方法,可以使当前线程主动退让 !!不能使其它线程退让 用线程对象调用setPriority和getPriority方法,可以设置和获取优先级 *

文档评论(0)

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

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

1亿VIP精品文档

相关文档