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