




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
多线程之赛跑游戏在corejava的课程中,有一个重要的知识点,就是线程。那什么是线程呢?线程,是“进程”中某个单一顺序的控制流。而进程和流程的最大区别就在于,每个进程都会独享一块存储区域,多个线程只能共享此进程的这块存储区域。那线程会给我们的java程序带来什么好处呢?好处一,可以实现并行,好处二,可以更有效的利用资源。下面我们就编写一个小小的赛跑游戏来看看线程给我们程序带来的惊喜吧。首先,咱们先看看程序最后完成的效果,及操作流程:游戏一开始将直接进入主题,简洁的界面,无需说明文档,一眼便知如何操作。(见图1)图1:游戏一开始的界面选择好我们要支持的运动员后,点击确定按钮,此时游戏还没有开始,但我们已不可再改变支持的对象了。(见图2)图2:下注后的界面好吧,既然不能更改,那么就让比赛快点开始吧!“蜗牛,加油!加油!”(见图3)图3:游戏开始后的界面哦也!蜗牛赢了!看到了吗,结果就在图4里,哈哈哈,点击确定后,400分就拿到手了!图4: 出结果后的界面真是一场痛快的比赛!现在,咱们来进行一下赛后分析,上面这个小游戏究竟有多少个线程呢?我听到有人说“这个很容易就看出来了,一共就3个吗,每个参赛的跑者,都是一个线程”。真的只是表面看到的这样吗?这个程序一共有5个线程!不信吗?那听我来说说:第1个线程,就是被大家忽略了,却有非常熟悉的main。这个是我们java 程序运行时,必定会运行的,也是我们学习java时最早接触的一个线程。第2、3、4个 线程,就是大家说的,那三个赛跑者,每一个都是一个独立的线程。第5个线程,从图上是看不到的,却又是一个非常重要的线程,它甘居幕后,担任着发令,裁决输赢的任务,我们暂且把它叫做“裁判”吧。整个游戏的过程我们了解了,所包含的线程我们也都分析了,下面的时间就是着手实现的阶段了:打着MVC的旗号,项目结构成了下面这个样子:images:中放置着,程序所需要的全部图片vo:里放着我们的一个实体类enter:里存放着程序的入口view:里存放着程序的界面control里存放着“裁判”类和监听器。 界面部分的编写我就不细说了,就是要继承JFrame来定义我们自己的窗体。顺便说一句,那个跑道是通过画图绘制的背景。别忘了给按钮添加监听器哦! 今天的主题是线程,那么我们就要仔细看看线程的代码了: java中实现线程的有两种途径,一种是继承Thread类,还有一种是实现Runnable接口。下面的关于 “运动员”、”裁判”的实现,我都统一使用了第二种方法,就是实现Runnable接口。具体代码如下:package saipao.vo;import java.awt.Image;import java.awt.Point;import java.util.Random;import javax.swing.ImageIcon;public class Runners implements Runnableprivate String name; /名称private Point weiZhi;/ 位置x和y的坐标private ImageIcon imgBig; /大图片private ImageIcon imgSmall; /小图标private boolean flag; /是否被下注,初值为falseprivate boolean win;/是否到达了终点 true为到达,false为没到达private boolean isRun;/是否继续跑 ,true为继续,false为停止/* * 名称、坐标、图片,小图标是只读的,只有get方法 * */public boolean isFlag() return flag;public void setFlag(boolean flag) this.flag = flag;public String getName() return name;public Point getWeiZhi() return weiZhi;public ImageIcon getImgBig() return imgBig;public ImageIcon getImgSmall() return imgSmall;public void setWin(boolean win) this.win = win;public boolean isRun() return isRun;public void setRun(boolean isRun) this.isRun = isRun;public Runners(String name,int x,int y,String imageName) super(); = name;this.weiZhi=new Point(x, y);this.imgBig=new ImageIcon(this.getClass().getResource(/images/+imageName+.gif);this.imgSmall=new ImageIcon(this.getClass().getResource(/images/+imageName+1.GIF);this.isRun=true; /默认为继续跑/退到起点public void fuWei()this.weiZhi.move(0, (int)this.weiZhi.getY();this.flag=this.win=false;this.isRun=true;/是否押对了public boolean isWiner()return this.flag&this.win; /重写Runnable接口中的Run方法,实现 x y坐标的改变public void run() Random rd=new Random(); /用于控制速度的随机数while(this.isRun)int x=(int)this.weiZhi.getX();x+=rd.nextInt(10)+1;this.weiZhi.move(x,(int)this.weiZhi.getY();try Thread.sleep(100); catch (InterruptedException e) / TODO Auto-generated catch blocke.printStackTrace();好了,运动员的代码我们看到了,你发现了Runnable接口中声明了几个方法了吗? 答对了,就一个叫做Run的方法。当线程启动后,就将会执行Run方法中的代码。知道执行完毕退出run方法,此线程就死亡了。光有运动员,没有裁判怎么行!package saipao.control;import java.util.Vector;import javax.swing.JOptionPane;import saipao.view.MainFrame;import saipao.vo.Runners;/* * 裁判类,用来确定是否有到达终点的赛跑者 * */public class CaiPan implements Runnable Vector vt;/ 运动员集合 int width;/终点线的位置 Thread thread; MainFrame mf;public CaiPan(MainFrame mf) super();this.vt = mf.getRnList();this.width =mf.getZhongDianXian();this.mf=mf;/运动员开始跑 private void startRun() thread=new Threadvt.size(); /给三个线程赋值并启动 for(int i=0;ithread.length;i+) threadi=new Thread(vt.get(i); threadi.start(); /判断是否有人到达重点public void run() /调用开跑方法this.startRun();/判断是否有运动员到达终点while(vt.get(0).isRun()mf.lblWeiZhi();for(int i=0;i=this.width)vt.get(i).setWin(true);/设置当前运动员赢了/并通知所有运动员都不用再跑了for(int j=0;jvt.size();j+)vt.get(j).setRun(false);/退出判断是否到达终点的循环break;/赛跑结束,判断是输还是赢,并计算金额boolean flag=false;for(int i=0;ivt.size();i+)if(vt.get(i).isWiner()flag=vt.get(i).isWiner();break;if(flag)JOptionPane.showMessageDialog(mf, you win!);elseJOptionPane.showMessageDialog(mf, you lost!);mf.changeMoney(flag);mf.btnKongZhi(2, true);有没有注意到,Runnable接口仅仅是提供了线程启动后要调用的功能(run),并没有提供启动线程的功能。要想真正的使线程运行起来,还是要通过T
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中国文件阅读器行业市场调研分析及投资战略咨询报告
- 2025年中国智能手机电感市场运营态势及发展前景预测报告
- 税务师美姗冲刺课件
- 2025年 西安齐力铁路技工学校招聘考试笔试试题附答案
- 2025年 禄丰市焊工证理论考试练习题附答案
- 香滑绿豆蓉行业深度研究分析报告(2024-2030版)
- 中国通信控制处理机行业市场全景调研及投资规划建议报告
- 2025年 常德汉寿县事业单位招聘考试笔试试题附答案
- 2020-2025年中国浓香型白酒行业市场调查研究及未来发展趋势报告
- 中国海口市房地产行业市场深度分析及投资策略咨询报告
- 花篮拉杆式悬挑脚手架工程监理实施细则
- 2022-2023学年北京市西城区五年级数学第二学期期末学业水平测试模拟试题含答案
- 前庭周围性眩晕的护理课件
- 东莞职业技术学院辅导员考试题库
- 某院检验科仪器设备档案
- 中铝中州矿业有限公司禹州市方山铝土矿矿山地质环境保护和土地复垦方案
- 职业卫生知识培训记录
- 起重设备维护保养记录(完整版)
- 网络信息安全培训课件-PPT
- 拌合站生产性试验成果报告
- SMT抛料改善报告课件
评论
0/150
提交评论