捋一捋
比赛会有一个胜利者,所以先定义胜利者
/**
* 定义胜利者
*/
private static String Winner;
写启动类,创建线程
public static void main(String[] args) {
Race r = new Race();
new Thread(r,"兔子").start();
new Thread(r,"乌龟").start();
}
实现的runnable方法 重写run方法
public class Race implements Runnable
/**
* 重写run()方法
*/
@Override
public void run() {
for (int i = 0; i <= 100; i++) {
//让兔子睡觉
if (Thread.currentThread().getName().equals("兔子")&&i/10==0&&i!=0){
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("兔子在第"+i+"步,开始睡觉");
}
//调用gameover方法,得到一个真假值
boolean flag=gameover(i);
//判断flag的真假,决定比赛是否结束
if (flag) {
return;
}
System.out.println(Thread.currentThread().getName()+"已经跑了"+i+"步");
}
}
用 Thread.currentThread().getName().equals("兔子") 选中线程,让兔子十步一睡
Thread.currentThread().getName() 默认选择当前使用的线程
/**
* 判断比赛是否完成
* @param steps
* @return
*/
private boolean gameover(int steps){
//判断是否有胜利者
if (Winner!=null) {
return true;
}
//先到一百就是胜利者,存入Winner
if (steps>=100){
Winner= Thread.currentThread().getName();
System.out.println(Winner+"是胜利者");
return true;
}
//没跑完,继续跑
return false;
}
每跑一步进来看一下,有没有产生胜利者,有的话就把他的名字装入winner里面去,并打印胜利者