RabbitAndTurtle3.java
package com.Thread2;
/**龟兔赛跑:实现Runnable接口,
* 此时两个线程共用一个run方法,如果给run加锁,执行效果会很明显,要么先执行完兔子的线程后再执行乌龟的,反之相反,区别在于谁先拿到资源
* 先执行了run方法,显然这种可以证明此时执行了一个run方法而不是两个。
* 测试类;Race3.java
* @author HYZX
* 假设兔子一次跑4米,乌龟一次跑1米
*/
public class RabbitAndTurtle3 implements Runnable{
int i;
int j;
static boolean flag=true;
public void run() {
while(flag){
double num=Math.random();
if(num<=0.3&&"兔子".equals(Thread.currentThread().getName())){
i=i+4;
System.out.println(Thread.currentThread().getName()
+"跑了:"+i+"米");
if(i==100){
System.out.println("比赛结束!------第一名是:"+Thread.currentThread().getName()
+"跑了:"+i+"米");
flag=false;
}
}else if(num<=1&&num>0.3&&"乌龟".equals(Thread.currentThread().getName())){
j=j+1;
System.out.println(Thread.currentThread().getName()
+"跑了:"+j+"米");
if(j==100){
System.out.println("比赛结束!------第一名是:"+Thread.currentThread().getName()
+"跑了:"+j+"米");
flag=false;
}
}
}
}
}
Race3.java
package com.Thread2;
public class Race3 {
public static void main(String[] args) {
RabbitAndTurtle3 r=new RabbitAndTurtle3();
Thread tuzi =new Thread(r,"兔子");
Thread wugui=new Thread(r,"乌龟");
tuzi.start();
wugui.start();
}
}
效果如下:
兔子跑了:4米
乌龟跑了:1米
兔子跑了:8米
乌龟跑了:2米
乌龟跑了:3米
乌龟跑了:4米
乌龟跑了:5米
乌龟跑了:6米
乌龟跑了:7米
兔子跑了:12米
乌龟跑了:8米
兔子跑了:16米
乌龟跑了:9米
乌龟跑了:10米
乌龟跑了:11米
乌龟跑了:12米
乌龟跑了:13米
兔子跑了:20米
乌龟跑了:14米
乌龟跑了:15米
乌龟跑了:16米
乌龟跑了:17米
兔子跑了:24米
乌龟跑了:18米
兔子跑了:28米
乌龟跑了:19米
兔子跑了:32米
乌龟跑了:20米
兔子跑了:36米
乌龟跑了:21米
兔子跑了:40米
兔子跑了:44米
兔子跑了:48米
兔子跑了:52米
兔子跑了:56米
兔子跑了:60米
兔子跑了:64米
兔子跑了:68米
兔子跑了:72米
兔子跑了:76米
兔子跑了:80米
兔子跑了:84米
兔子跑了:88米
兔子跑了:92米
兔子跑了:96米
兔子跑了:100米
比赛结束!------第一名是:兔子跑了:100米
标签:java,Thread,龟兔,兔子,run,乌龟,多线程,public
来源: https://blog.youkuaiyun.com/HYZX_9987/article/details/101217704
本文通过Java的多线程实现了一个龟兔赛跑的模拟,其中兔子和乌龟分别由两个线程控制。每个线程运行时会随机决定前进距离,最终兔子先到达终点,比赛结束。该示例展示了Java中多线程共享资源并行执行的原理。
1805

被折叠的 条评论
为什么被折叠?



