多线程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 }

 

posted @ 2020-02-04 18:28  断浮  阅读(336)  评论(0编辑  收藏  举报