面向对象编程导论第八讲.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
面向对象编程导论 授课人:宋东峰 第八章 线程 本讲概要 本讲重点 线程的概念 线程的生命周期 Java中多线程的编程 继承Thread类与使用Runnable接口 Thread类的主要方法 线程的同步与死锁 4.1 线程及相关概念 程序:计算机高级语言编写的代码,静态,是应用程序的蓝本。 进程:是程序的一次动态执行过程,进程包括所要执行的指令和所需的系统资源,不同的进程所占用的系统资源相对独立。 线程:比进程更小的执行单位,自身不能自动运行,必须栖身于某一进程之中,由该进程触发执行,属于同一进程的线程共享该进程的系统资源。 多进程:系统中多个程序同时执行(多任务)。 多线程:程序(进程)中多个片断同时执行。 4.1.1 线程及相关概念 Java程序执行的过程 当JVM加载代码,发现main方法之后,就会启动一个线程,这个线程称作“主线程”,该线程负责执行main方法。 如果main方法中没有创建其他的线程,那么当main方法执行完最后一个语句,JVM就会结束Java应用程序。 如果main方法中创建了其他线程,那么JVM就要保证每个线程都有机会使用CPU资源。 JVM一直要等到主线程中的所有线程都结束之后,才结束Java应用程序。 4.1.2 线程的生命周期 线程的五个生命周期 新建:新建的线程处于新建状态。 就绪:在创建线程后,它将处于就绪状态,排队等待进程调用。 运行:线程获得CPU资源后,就进入运行状态,开始执行。 阻塞:在线程等待一个事件时(例如输入/输出操作),就处于阻塞状态。 死亡:线程不再具有继续运行的能力。 线程完成了自己的任务。 线程被强迫终止。 4.1.2 线程生命周期示意图 4.2 基本编程思路 例: class A implements Runnable{ public void run(){….}// 线程所需要执行的代码 } class B { public static void main(String[] arg){ Runnable a=new A(); Thread t=new Thread(a); t.start(); // main方法所在线程的执行代码 } } 4.2 线程的优先级和调度调度 当一个在就绪队列中排队的线程被分配到处理器资源而进入运行状态之后,这个线程就称为被“调度”或被线程调度管理器选中了。 线程调度管理器负责管理线程排队和处理器在线程之间的分配 在java系统中,线程调度依据优先级基础上的“先到先服务”原则。 4.2.1线程的优先级和调度调度 Java虚拟机(JVM)中的线程调度器负责管理线程,调度器把线程的优先级分为10个级别。 优先级使用Thread类中的类常量表示。 4.2.2 线程的创建 4.2.3 线程的创建 4.3线程的创建 4.3 线程的创建 4.3 线程的创建 需要注意的问题 程序需要建立自己的线程时,只需要创建一个已定义好的Thread子类的实例就行了。 当创建的线程调用start()方法开始运行时,run()方法将被自动执行。 当run()方法执行完毕,线程就释放内存。 在线程没有结束run()方法前,不赞成让线程再调用start()方法,否则将发生IllegalThreadStateException异常 4.3 线程的创建 public static void sleep(long millis) 优先级高的线程在它的run()方法中调用sleep方法来使自己放弃处理器资源,休眠一段时间。 public final boolean isAlive() 检查线程是否仍然在运行。 Static Thread currentThread() 判断当前正在占有CPU的线程。 Join()\守护线程的使用 4.3 实现Runnable接口 4.3 实现Runnable接口 4.3 线程的基本控制 4.3 线程的基本控制 4.4 数据的完整性 4.4 数据的完整性 对共享对象的访问必须同步,叫做条件变量. Java语言允许通过监视器(有的参考书称其为管程)使用条件变量实现线程同步. 监视器阻止两个线程同时访问同一个条件变量.它的如同锁一样作用在数据上. 线程1进入withdrawal方法时,获得监视器(加锁);当线程1的方法执行完毕返回时,释放监视器(开锁),线程2的withdrawal方能进入. 4.4 数据的完整性 用synchronized来标识的区域或方法即为监视器监视的部分。 一个类或一个对象由一个监视器,如果一个程序内有两个方法使用synchronized标志,则他们在一个监视器管理之下. 一般情况下,只在方法的层次上使用关键区 4.4 多线程问题

文档评论(0)

0520 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档