新Java程序设计(第二版) 教学课件 杨学全 第10章Java的多线程编程.pptVIP

新Java程序设计(第二版) 教学课件 杨学全 第10章Java的多线程编程.ppt

  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文档。上传文档
查看更多
10.2 线程的创建 线程的实现方法 10.2 线程的创建 线程的实现方法 继承Thread类 定义一个线程类,它继承线程类Thread并重写其中的run()方法。这个run()方法中包含了用户线程的操作。当需要创建线程时,只需要创建一个已定义好的Thread子类的对象就可以了 10.2 线程的创建 线程的实现方法 实现Runnable接口 使用该方法创建线程时,通常是创建一个类实现接口Runnable作为线程的目标对象。初始化一个线程类时,将目标对象传递给Thread实例,由该目标对象提供run()方法。这种方法在实现Runnable接口的同时可以继承其他类。 10.2 线程的创建 线程的实现方法 两种方法的比较 继承Thread类。程序编写简单。可以用this指针指向实际控制运行的Thread对象,因此不需要再使用类似于Thread.currentThead()的语句。但是不能再继承其他类。 实现Runnable接口。从面向对象的角度看,它更符合面向对象设计的思想。另外,它也可以继承其他类。 10.2 线程的创建 线程的实现方法 在具体应用中,采用哪种方法来创建线程要视具体情况而定。通常,当一个线程已继承了另一个类,而想在该线程中在创建一个新的线程时,就应该用第二种方法来构造,即实现Runnable接口。 10.3 线程的同步 有时多个线程执行时需要共享数据,这时候就需要考虑到其他线程的状态和行为。如:有两个售票口:A和B同时售票,对于售出的车票,如果A窗口售出的票,B窗口就不能再售出。否则就会出现两个乘客的车票是相同的。这时候车票即是两个售票口共享的资源。车票在某一时刻只被一个售票口所使用。 10.3 线程的同步 线程同步的思想即能解决以上问题。在线程同步中,Java引入了一个类似于信号量的机制:管程。每个被独立享有的资源对应一个管程,首先占用这个资源的线程同时拥有了该资源的管程,在它完成操作释放管程之前, 10.3 线程的同步 其他欲访问同一资源的线程只能排队等候管程,从而实现了在某一时刻,仅有一个线程对资源的独占。在线程同步中,Java使用synchronized关键字标识被同步的资源。凡是被synchronized关键字修饰的方法或代码段,系统在运行时都会分配给它一个管程,并保证在同一时刻只有一个线程在独占这份资源。 10.4 线程的死锁 线程死锁指两个或以上线程共享同一种资源,第一个线程等待第二个线程释放资源,而同时第二个线程又在等待第一个线程释放资源。好比这种现象:在人行道上两个人迎面相遇,为了给对方让道,两人同时向一侧迈出一步,双方无法通过,又同时向另一侧迈出一步,这样还是无法通过。 10.4 线程的死锁 解决死锁没有简单的方法,这是因为使线程产生这种问题是很具体的情况,而且往往有很高的负载。大多数软件测试产生不了足够多的负载,所以不可能暴露所有的线程错误。在每一种使用线程的语言中都存在线程死锁问题。在Java中,线程死锁也将越来越普遍了。虽然可以在Java代码中增加同步关键字synchronized的使用,这样可以减少死锁,但这样做也会影响性能。所以在进行多线程编程时一定要谨慎。 10.4 线程的死锁 假如我们的程序根本不要求多个代码块并发执行,那自然不需要使用多线程;假如我们的程序虽然要求多个代码块并发执行,但是却不要求乱序,则我们完全可以用一个循环来简单高效地实现,也不需要使用多线程;只有当它完全符合多线程的特点时,多线程机制对线程间通信和线程管理的强大支持才能有用武之地,这时使用多线程才是值得的。 10.5 本章小结 在实生中有些处理需要多个方法协助完成,例如一个提供火车票订的购系统同时有很多人使用,但无论如何也不能出现一个座位卖给两个人这种情况,这就需要多线程的控制。通过本章的的学习同学们要熟练掌握多线程的相关概念、线程的状态及生命周期、Java中实现多线程的方式及多线程的管理等。 10.6 习题 一、判断题 1.当一个线程睡眠时,sleep()方法不消耗处理器时间。( ) 2.如果一个线程阻塞了,那么它是不可执行的。( ) 二、选择题 1.一个Java应用程序运行后,在系统中是作为一个( )。 A、线程 B、进程 C、进程或线程 D、不可预知 2.线程的状态不包括( )。 A、新建 B、死亡 C、运行 D、睡眠 10.6 习题 三、简答题 1.什么是线程,什么是进程? 2.简述线程的生命周期? 在线教务辅导网: 教材其余课件及动画素材请查阅在线教务辅导网 QQ:349134187 或者直接输入下面地址: 第十章Java的多线程编程 Java的多线程编程 多线程概述 线程的创建 线程的同步 线程的死锁 本章小结 10.1多线程概述 进程与线程 线程的状态与生命周期 10.

文档评论(0)

118压缩包课件库 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档