其他分享
首页 > 其他分享> > 关于线程的简单讲解——龟兔赛跑问题

关于线程的简单讲解——龟兔赛跑问题

作者:互联网

思路:利用多线程解决,通过继承Runnable接口,构造兔子与乌龟线程,使兔子线程每跑十步就休息一下。让他们同时启动,观察比赛结果。

public class rabbitAndTortoise implements Runnable{
	
	private static String winner;
	
	public static void main(String[] args) {

//		rabbitAndTortoise rt=new rabbitAndTortoise();
//		new Thread(rt,"兔子").start();
//		new Thread(rt,"乌龟").start();
		rabbitAndTortoise rabbit=new rabbitAndTortoise();
		rabbitAndTortoise tortoise=new rabbitAndTortoise();
		new Thread(rabbit,"兔子").start();
		new Thread(tortoise,"乌龟").start();
		
	}

	@Override
	public void run() {
		for(int i=1;i<=100;i++) {
//			如果是兔子,那么每走十步睡一次觉
			if(Thread.currentThread().getName().equals("兔子") && i%10==0) {
				try {
					Thread.sleep(2);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
			boolean flag=gameOver(i);
			if(flag){
				break;
			}
			System.out.println(Thread.currentThread().getName()+"跑了"+i+"步");
			
			
		}
	}
//谁先跑到100步,谁获胜
	private boolean gameOver(int i) {
		if(winner !=null) {
			return true;
		}else {
			if(i>=100) {
				winner=Thread.currentThread().getName();
				System.out.println("winner is"+winner);
				return true;
			}
		}
		return false;
	}
	

}

书写思路:程线的开始只需要调用start()方法,线程的结束则分为两种情况:1.某个线程已经跑了一百步,那么游戏结束,结束胜者线程,输出胜者名字。2.已经分出了胜负,需要将败者线程终止,那么判别条件可以从胜者名字变量入手,当分出胜者时,名字变量就不为空,从而结束败者线程。

当线程跑起来后,就会调用run()方法。兔子和乌龟线程基本一样,所以可用公用一个run(),在线程中添加if限定条件“只用线程是兔子且线程跑了十步”,那么兔子线程就强制睡觉一下。


结果如图

 

标签:赛跑,rabbitAndTortoise,Thread,龟兔,兔子,start,线程,new
来源: https://blog.csdn.net/nairuozi/article/details/115433788