Java典型模块与项目实战大全(第4章).docVIP

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Java典型模块与项目实战大全(第4章)

第4章 学生并发接水(线程Thread) 在现实生活中,经常会同时发生两件事情,例如“两个人同时过一个独木桥”或“两个人同时过一个独木门”。如果要用程序来模拟,则需要用到Java语言中的线程。线程是Java语言中一个最重要的机制,它能够使程序可以有很多“分身”在计算机中运行,实现复杂的功能。本章除了详细讲解如何通过线程实现许多同学并发接水的实例外,还将详细地介绍线程的基本知识。 本章的学习目标如下: 掌握学生并发接水实例; 理解为什么要使用线程; 掌握创建新线程的两种方式。 4.1 学生并发接水原理 所谓“学生并发接水”,是指学校里学生接水的3个过程:下课后许多同学从教室到水房的过程,接水过程和从水房到教室的过程。 4.1.1 项目结构框架分析 对于学生并发接水项目,根据面向对象的思想,需要创建两个对象,即学生和水龙头。该项目中的3个包分别描述了现实中存在的不排队接水、排队接水和接完水后一起回教室的3种情况。 学生并发接水项目目录如图4.1所示,各个目录功能如下。 包com.cjg.noqueue:模拟学生并发接水时,没有排队。 包com.cjg.queue:模拟学生并发接水时,有组织地 排队。 包com.cjg.together:模拟学生通过排队形式接完水后,一起回教室。 4.1.2 项目功能业务分析 本节将以直观的方式向读者介绍整个项目要实现的功能。这些功能包括不排队接水、排队接水和接完水后统一回教室。 1.不排队接水 假如有4个学生小常、小尚、小王和小刘下课后就往水房跑,在具体接水的过程中,由于水房中只有一个水龙头,所以4个学生通过抢夺形式接水,因此谁先接完水并不确定。具体过程如图4.2所示。 在图4.2中,虽然学生小常第一个跑到水房,但是由于在具体接水过程中没有排队,所以学生小王第一个接完水,第一个跑回了教室,而不是小常。 2.排队接水 4个学生小常、小尚、小王和小刘下课后就往水房跑,在具体接水的过程中,虽然水房中只有一个水龙头,但是4个学生通过排队形式接水。所以谁先开始接水谁就会先结束接水,具体过程如图4.3所示。 在图4.3中,既然学生小常第一个进行接水,所以会第一个接完水,第一个跑回教室。学生小刘最后一个接水,所以会最后一个接完水,最后一个跑回教室。这是因为这些学生是通过排队的形式进行接水。 3.接完水后一起回教室 4个学生小常、小尚、小王和小刘下课后就往水房跑,在具体接水的过程中,虽然通过排队的形式接水,但是在接完水后却没有跑回教室,而是等其他学生全部接完水才向教室跑,具体过程如图4.4所示。在图4.4中,虽然学生小常第一个接水、第一个接完水,但是其接完水后却没马上跑回教室,而是等其他学生接完水后一起跑回教室。 图4.2 不排队运行结果 图4.3 排队运行结果 图4.4 一起回教室运行结果 4.2 不排队形式学生并发接水 本章通过线程技术来模拟学生不排队接水的过程,具体程序架构如图4.5所示,它包含两个类对象Water.java、Student.java和一个进行测试的类TestWater.java。 图4.5 程序关系图 4.2.1 水龙头类 Water.java类用来模拟现实生活中的水龙头,由于水龙头主要具有流水的功能,所以该类中拥有一个流水的方法,具体内容如代码4.1所示,该类的UML如图4.6所示。 图4.6 Water类图 代码4.1 水龙头类:Water.java public class Water { public void flowWater(String studentName) { //流水的方法 System.out.println(开始为 + studentName + 流水); //为某学生流水 try { Thread.sleep(3000); //线程休眠 } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(结束为 + studentName + 流水); //结束为某同学流水 } } 【代码解析】 上述代码由于主要是讲解线程的机制,所以如何开始流水给学生及如何结束流水给学生的过程就简化了,只是输出了一句代码。 4.2.2 学生类 Student.java类用来模拟现实生活中的学生,由于学生要实现并发接水的过程,所以接水的代码全部放在了run()方法里,具体内容如代码4.2所示,该类的UML如图4.7所示。 图4.7 学生类

文档评论(0)

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

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

1亿VIP精品文档

相关文档