多线程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 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值