Java程序设计教学课件作者徐红电子课件Java程序设计教学课件作者徐红电子课件KC090000023_单元5_任务4章节幻灯片.pptVIP

Java程序设计教学课件作者徐红电子课件Java程序设计教学课件作者徐红电子课件KC090000023_单元5_任务4章节幻灯片.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文档。上传文档
查看更多
任务四:学生成绩读写程序设计 单元五:Java语言高级程序设计 教学目标 知识目标 掌握多线程互斥关系的产生原因; 掌握Synchronized关键字的意义。 能力目标 能会使用同步技术解决互斥的实现方法。 教学内容 4 任务陈述 1 2 3 知识准备 任务实施 任务拓展 任务实训 5 任务描述: 学生成绩读写模拟。程序中有两个线程,一个负责写学生成绩数据,一个负责读取和显示学生成绩数据。为了清楚,一个学生有20门课的成绩,写线程写入的每门课的成绩都和其学号相同。如果读线程发现成绩和学号不一致的情况,则说明出现了共享数据读写不一致的问题,利用线程同步机制解决共享数据读写不一致的问题。 1. 任务陈述 4.1 多线程的共享互斥 由于线程是共享进程资源,因此会出现多线程在同时操作同一资源,其中一个线程对资源的操作可能会改变资源状态,而该状态的改变又会影响另一个线程对该对象的操作结果。 例如,在不同的窗口购买火车票,现在只剩一张火车票的情况下,两个窗口同时进行了卖火车票操作,都会激发一个线程完成卖火车票操作,结果有可能是一个座位卖出了2张相同的票。 需要被同一进程的不同线程访问的数据称为线程共享数据。像这种在某一时刻只有一个线程可以操作某个资源的机制就叫做共享互斥。 2. 知识准备 4.1 多线程的共享互斥 【例5-15】模拟父母在一个盘子中放入苹果,孩子在盘子中拿出苹果,演示多线程的互斥关系。 程序运行结果如下: 父母向盘子里放:第1个苹果 孩子从盘子里拿:第1个苹果 孩子从盘子里拿:第1个苹果 父母向盘子里放:第2个苹果 孩子从盘子里拿:第2个苹果 父母向盘子里放:第3个苹果 孩子从盘子里拿:第4个苹果 …… 2. 知识准备 在不同的计算机上运行该程序,结果有可能不同。但通过运行结果可以看出,父母刚刚放入第三个苹果,孩子则已经去拿第四了,这显然是不合理的。因此上面两个线程就存在了互斥关系,任何一个线程对数据的操作都影响程序的结果。 4.2使用线程同步解决共享互斥 对于互斥现象的出现,Java中提供了同步的控制机制来达到当多个线程需要共享资源时,能够确定资源在某一时刻只能被一个线程占用。 Java使用synchronized关键字来标记对象(方法,变量和块)的“互斥锁”,从而保证在任何时刻只能有一个线程访问该对象。同时,Java还提供了wait()、notify()和notifyAll()控制方法: public final void wait():使用当前线程主动释放互斥锁,并进入该互斥锁的等待队列。 public final void notify():唤醒wait队列中的第一个线程,并将该线程移入互斥锁申请队列中。 public final void notifyAll():唤醒wait队列中的所有线程,并将线程移入互斥锁申请队列。 2. 知识准备 【例5-15】使用同步技术改进上面的例子,解决拿苹果和放苹果过程中存在的互斥关系。 public synchronized int getApple(){//对方法进行同步设置 while(this.available==false){ try{ wait();//进入等待队列 }catch(Exception ex){ ex.printStackTrace(); } } this.available=false; notifyAll();//通知队列中所有等待的对象 return apple; } 2. 知识准备 public synchronized void putApple(int apple){ //方法同步实际上还是对资源共享的设置,这里的资源就是apple while(this.available==true){ try{ wait(); }catch(Exception ex){ ex.printStackTrace(); } } this.apple=apple; this.available=true; notifyAll();//最后唤醒所有等待的对象 } } 2. 知识准备 实施思路 同步块和同步方法都可以解决共享数据保护的问题。如果代码都是自己写的,尽可能使用同步方法。如果调用别人写好的、自己无法修改的非同步方法,就只能将调用语句放在同步块中了。 定义StudentScore类,通过增加两个同步方法readScore

文档评论(0)

精品课件 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档