Java基础教程(第7章).ppt

  1. 1、本文档共45页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
7.6 多线程的互斥与同步 经常有一些同时运行的线程需要共享数据,此时就需考虑其他线程的状态和行为,否则就不能保证程序的运行结果的正确性。 7.6.1 临界资源问题 下面是一个堆栈的类定义: class stack { int index = 0; // 堆栈指针 char[] data = new char[6]; // 堆栈空间 public void push(char c) { // 压栈操作 data[index] = c; // 数据入栈 index++; // 指针向上移动一位 } public char pop() { // 出栈操作 index--; // 指针向下移动一位 return data[index]; // 数据出栈 } } p q r ① ② 7.6.2 互斥锁或对象锁 为解决操作的不完整性问题,引入了对象互斥锁,来保证共享数据操作的完整性。 每个对象都对应于一个可称为“互斥锁”的标记,互斥锁可以保证在任一时刻,只能有一个线程访问该对象。 Synchronized(object o){ 需要一次执行完的语句块 } public void push(char c) { synchronized (this) { data[idx] = c; idx++; } } public synchronized char pop() { idx--; return data[idx]; } 同步代码 同步方法 注意: 1、所有存取共享数据的方法必须在同一把锁上同步 2、由同步锁保护的数据应为private的 死锁 死锁:有多个线程竞争多个资源,就可能会产生死锁 两个线程相互等待来自对方的锁 它不能被监测到或避免 它可以通过以下方法来避免 决定获取锁的次序 始终遵照这个次序 按照相反的次序释放锁 public class DeadlockRisk { private Resource A = new Resource(); private Resource B = new Resource(); public int read() { synchronized (A) { synchronized (B) { return B.value + A.value; } } } public void write(int a, int b) { synchronized (B) { synchronized (A) { A.value = a; B.value = b; } } } } * * * 线程调度器按线程的优先级高低选择高优先级线程(进入运行中状态)执行,同时线程调度是抢先式调度,即如果在当前线程执行过程中,一个更高优先级的线程进入可运行状态,则这个线程立即被调度执行。 抢先式调度又分为:时间片方式和独占方式。在时间片方式下,当前活动线程执行完当前时间片后,如果有其他处于就绪状态的相同优先级的线程,系统会将执行权交给其他就绪态的同优先级线程;当前活动线程转入等待执行队列,等待下一个时间片的调度。 在独占方式下,当前活动线程一旦获得执行权,将一直执行下去,直到执行完毕或由于某种原因主动放弃CPU,或者是有一高优先级的线程处于就绪状态。 线程调度器按线程的优先级高低选择高优先级线程(进入运行中状态)执行,同时线程调度是抢先式调度,即如果在当前线程执行过程中,一个更高优先级的线程进入可运行状态,则这个线程立即被调度执行。 抢先式调度又分为:时间片方式和独占方式。在时间片方式下,当前活动线程执行完当前时间片后,如果有其他处于就绪状态的相同优先级的线程,系统会将执行权交给其他就绪态的同优先级线程;当前活动线程转入等待执行队列,等待下一个时间片的调度。 在独占方式下,当前活动线程一旦获得执行权,将一直执行下去,直到执行完毕或由于某种原因主动放弃CPU,或者是有一高优先级的线程处于就绪状态。 Java程序设计 第七章 多线程 第7章 多线程 线程简介 Thread类的子类创建线程 实现Runnable接口 基本的线程控制 线程的调度 多线程的互斥与同步 Daemon线程 重点内容: 如何定义一个线程 线程的状态转换关系图 线程间如何实现共享数据 线程间如何处理临界资源 线程间如何实现相互通信 理解生产者--消费者模型 7.1 线程简介 理解线程 理解多线程 7.1 线程简介 程序:是一段静态的代码,它是应用软件

文档评论(0)

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

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

1亿VIP精品文档

相关文档