多线程模拟实现龟兔赛跑

 

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)