关于线程的简单讲解——龟兔赛跑问题
作者:互联网
思路:利用多线程解决,通过继承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