多线程详解p7、龟兔赛跑

简介: 多线程详解p7、龟兔赛跑

模拟龟兔赛跑思路


  1. 首先需要知道跑道有多长使用for循环实现
  2. 然后要有一个方法判断比赛是否结束,这里我们就用了一个gameOver方法,将兔子或者乌龟跑的步数传进该方法进行判断,为了严谨要先判断是否有胜者如果有的话退出该方法,没有接着判断
  3. 判断步数是否大于100如果大于说明已经到终点了使用Thread.currentThread().getName()将线程名字给winner然后说明胜利者是谁
  4. for循环里边有一个布尔值接收gameOver函数返回值,判断是否比赛结束。
public class Race implements Runnable{
    //模拟龟兔赛跑
    private static String winner;
    @Override
    public void run() {
        for (int i = 0; i <= 100; i++) {
            //判断比赛是否结束
            boolean flag = gameOver(i);
            if(flag){
                break;
            }
            System.out.println(Thread.currentThread().getName()+"跑了"+i+"步");
        }
    }
    //判断是否完成比赛
    private boolean gameOver(int step){
        if(winner!=null){
            return true;
        }
            if (step >= 100) {
                winner = Thread.currentThread().getName();
                System.out.println("胜利者为" + winner);
                return true;
            }
        return false;
    }
    public static void main(String[] args) {
        Race race = new Race();
        new Thread(race,"乌龟").start();
        new Thread(race,"兔子").start();
    }
}
相关文章
|
5月前
|
C语言
c语言编程练习题:7-39 龟兔赛跑
c语言编程练习题:7-39 龟兔赛跑
102 0
|
13天前
|
消息中间件 安全 算法
通透!从头到脚讲明白线程锁
线程锁在分布式应用中是重中之重,当谈论线程锁时,通常指的是在多线程编程中使用的同步机制,它可以确保在同一时刻只有一个线程能够访问共享资源,从而避免竞争条件和数据不一致性问题。
|
6月前
|
安全 Java 数据库连接
ThreadLocal Java多线程下的影分身之术
后来,我把c删掉,变成了下面这样。如果我现在想查h,按照上面getEntry的逻辑,是不是遍历到3就停了,所以找不到h了? getEntry的逻辑表面确实是这样,但实际上getEntryAfterMiss、remove、gets时都会直接或者间接调用expungeStaleEntry会对表里的数据做整理。expungeStaleEntry()除了利用弱引用的特性对tab中Entry做清理外,还会对之前Hash冲突导致后移的Entry重新安放位置。所以不可能出现下面这种tab排放的。
22 0
|
8月前
|
监控 安全 算法
这次锁面试题的连环16问,差点就跪了
这次锁面试题的连环16问,差点就跪了
116 0
|
10月前
|
定位技术
Phaser(二):小恐龙跑酷游戏
创建地图放置障碍物添加玩家操作和动画玩家与障碍物碰撞游戏结束添加场景装饰云和石头完整代码
62 0
|
11月前
|
算法 Python
算法创作|龟兔赛跑问题解决方法
算法创作|龟兔赛跑问题解决方法
110 0
|
12月前
7-169 龟兔赛跑
7-169 龟兔赛跑
38 0
|
消息中间件 JavaScript 小程序
新来个阿里 P7,仅花 2 小时,撸出一个多线程永动任务,看完直接跪了,真牛逼!
新来个阿里 P7,仅花 2 小时,撸出一个多线程永动任务,看完直接跪了,真牛逼!
|
存储 监控 并行计算
又熬了一个通宵,肝了满满干货的线程池
由Doug Lea在JCP JSR-166 专家组成员的协助下撰写,并已发布到公共领域,如 creativecommons.org/publicdomai… 一个ExecutorService ,它使用可能是多个池线程中的一个来执行每个提交的任务,通常使用Executors工厂方法对其进行配置。 线程池解决了两个不同的问题:由于减少了每个任务的调用开销,它们通常在执行大量异步任务时提供改进的性能,并且它们提供了一种绑定和管理资源(包括线程)的方法,该资源在执行集合时消耗掉了任务。 每个ThreadPoolExecutor还维护一些基本统计信息,例如已完成任务的数量。 为了在广泛的上下文中有用