Java多线程——龟兔赛跑
来源:互联网 发布:suse网络配置 编辑:程序博客网 时间:2024/05/18 12:31
-_- 学java快有一个月了,之前一直有记录自己学习过程的想法,但是太懒了所以……
今天进入线程学习的部分了,老师说是最最最最难的,所以还是记录一下吧~~
从今天的作业说起
一、题目:
实现龟兔赛跑
提示:可以采用Math.random()取得0~1之间的随机数模拟比赛进程, 如总距离为100米,在随机数0~0.3之间代表兔子跑,每次跑2米,在0.3~1之间代表乌龟跑,每次跑1 米,先跑完100米者为胜利者
结构:
Race类:产生RabbitAndTurtle的两个实例,分别代表兔子和乌龟
RabbitAndTurtle类:继承Thread类,实现赛跑的逻辑
二、个人分析
拿到题目之后必要容易想到的是整个 题目的大概框架
1、RabbitAndTurtle类//RabbitAndTurtle类继承Thread类实现多线程public class RabbitAndTurtle extends Thread { //跑道长度 public int distance = 100; //重写run方法 @Override public void run() { //题目中提到的Math.random()方法,一开始我还没想到怎么用,先摆在这里 double ran = Math.random(); //先测试一下输出结果 for (; distance > 0; distance--) { String name = Thread.currentThread().getName(); System.out.println(name+" "); } }}2、Race类public class Race { public static void main(String[] args) { //产生RabbitAndTurtle的两个实例,分别代表兔子和乌龟 Thread rabbit = new RabbitAndTurtle(); Thread turtle = new RabbitAndTurtle(); //setName()方法起名字 rabbit.setName("小白兔子"); turtle.setName("乌龟"); //启动线程 rabbit.start(); turtle.start(); }}
ok,写到这里程序的大致的内容已经差不多了,剩下的就是实现具体的run方法中的逻辑,我们先看一下有木有什么错误。
运行结果
可以看到两个线程是随机交替进行的,接下来细化run方法
//补充几个属性//跑道长度public int distance = 100;//不满足条件(如跑到了终点)结束线程static boolean flag = true;//已经跑了的长度public int predistance = 0;@Overridepublic void run() { //还是不知道怎么用的随机数-_- double ran = Math.random(); //获得当前线程名字 String name = Thread.currentThread().getName(); //进行循环立一个flag作为循环条件~~~ while(flag){ //我也不知道为什么要先sleep()一下-_-,原谅我很渣 //但是看到有小伙伴这么说: //java多线程中,在有睡眠(sleep)时,执行顺序是抢占式的。 //也就是说,执行不是按固有的顺序来的,而是谁抢先占据到内存空间,谁就先运行。 //但是!老师说JVM默认的轮换调度就是抢占啊~~~~此处先留一个小疑问吧 try { Thread.sleep(100); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } //还是搞不懂提示中的随机数,不是直接匹配名字就好了么-_- //明天讲了这一题再来纠结这个问题 //如果当前线程为乌龟,一次前进一米 if(name.equals("乌龟") && predistance!=100){ predistance += 1; System.out.println(name + "我跑了:" + predistance + "米"); if(predistance == 100){ System.out.println("=================乌龟赢了================="); //立的flag在此处起作用,跑到100m了flag置为false不再进行循环 flag = false; } } //如果当前线程为兔子,一次前进两米 if(name.equals("小白兔子")&& predistance!=100){ predistance += 2; System.out.println(name + "我跑了:" + predistance + "米"); if(predistance == 100){ System.out.println("=================小白兔子赢了================="); //立的flag在此处起作用,跑到100m了flag置为false不再进行循环 flag = false; } } } }
激动人心的时候到了!!
让我们看一下运行结果~~~
…….
基本符合题目要求|・ω・`),还是有一点开心的
但是!!!
最后一行是什么鬼!
我不管我不管我不管,看不见看不见看不见-_-
不是我的逻辑有问题!!
(´ཀ`」 ∠)_改了半天还是没改对
还是明天听讲解吧(๑‾ ꇴ ‾๑)
关于题目就写到这里
对了,我是一只萌新~~~~
欢迎各路大神指教,也欢迎一起学习的小伙伴互相讨论
对于文章中措辞或者逻辑捉急的地方欢迎大家指正
虽然怀疑有没有人会看到这篇文章 但还是写了很多~
我爱学习~学习使我快乐~
- Java多线程——龟兔赛跑
- Java多线程—龟兔赛跑问题
- Java多线程——龟兔赛跑(加强版)
- JAVA多线程编程实现龟兔赛跑
- java多线程之龟兔赛跑问题
- JAVA多线程实现龟兔赛跑
- 多线程龟兔赛跑
- 龟兔赛跑多线程
- 龟兔赛跑之Java多线程通讯初识
- 多线程程序设计之龟兔赛跑
- 多线程小案例之龟兔赛跑
- 龟兔赛跑Java代码
- java 龟兔赛跑预测
- 多线程实现——新龟兔赛跑
- hdu2059——龟兔赛跑
- dp问题——龟兔赛跑
- Hdu2059— 龟兔赛跑 动态规划
- HDU 2059 —龟兔赛跑
- MySQL高性能学习笔记
- PAT L1-048 矩阵A乘以B
- Android Studio配置文件路径修改
- LYOS —— 开篇
- Spring Boot (教程十二: AOP拦截器)
- Java多线程——龟兔赛跑
- java 实现最简单的斐波那契数列
- Windows上Python和Pycharm的安装
- ORA-00604: 递归 SQL 级别 1 出现错误 ORA-01000: 超出打开游标的最大数 ORA-00604: 递归 SQL 级别 1 出现错误 ORA-01000: 超出打开游标的最大数
- 最长递增子序列(动态规划实现)
- Lua table转string函数
- JavaScript 多选框多选与取消多选实例:
- C# DataTable转为对象或对象列表
- 单例模式的七种写法