多线程06:龟兔赛跑
案例:龟兔赛跑-Race
1、首先来个赛道的距离,然后要离终点越来越近
2、判断比赛是否结束,结束就来看下谁胜利了
3、胜利后,打印出胜利者
4、龟兔赛跑开始,相当于两条线程开始跑了,看谁先到最后一步
5、然后,因为故事中是乌龟赢的,兔子要睡觉,所以我们来模拟兔子睡觉
6、最后,乌龟赢得了比赛
实现了Runnable接口,共享一条跑道。丢入Thread代理对象,调用start()方法开启两个线程代表兔子和乌龟,让兔子每10步并且隔10ms睡一觉,让乌龟赢。
1 package com.thread.demo01; 2 3 //模拟龟兔赛跑 4 public class Race implements Runnable { 5 6 //胜利者 7 private static String winner; 8 9 @Override 10 public void run() { 11 for (int i = 0; i <= 100; i++) { 12 13 //模拟兔子休息,每10步休息10毫秒 14 if (Thread.currentThread().getName().equals("兔子") && i % 10 == 0) { 15 try { 16 Thread.sleep(10); 17 } catch (InterruptedException e) { 18 e.printStackTrace(); 19 } 20 } 21 22 //判断比赛是否结束 23 boolean flag = gameOver(i); 24 if (flag) { 25 break; 26 } 27 System.out.println(Thread.currentThread().getName() + "跑了" + i + "步"); 28 } 29 } 30 31 //判断是否完成比赛 32 private boolean gameOver(int steps) { 33 //判断是否有胜利者 34 if (winner != null) { 35 return true; 36 } 37 { 38 if (steps >= 100) { 39 winner = Thread.currentThread().getName(); 40 System.out.println("winner is " + winner); 41 return true; 42 } 43 } 44 return false; 45 } 46 47 public static void main(String[] args) { 48 Race race = new Race(); 49 50 new Thread(race, "兔子").start(); 51 new Thread(race, "乌龟").start(); 52 53 } 54 }