案例:龟兔赛跑-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 }