多线程详解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();
    }
}
相关文章
|
6月前
|
C语言
c语言编程练习题:7-39 龟兔赛跑
c语言编程练习题:7-39 龟兔赛跑
146 0
|
3月前
|
安全 Java 调度
震撼揭秘!手撕并发编程迷雾,Semaphore与CountDownLatch携手AQS共享模式,让你秒懂并发神器背后的惊天秘密!
【8月更文挑战第4天】在Java并发编程中,AbstractQueuedSynchronizer (AQS) 是核心框架,支持独占锁与共享锁的实现。本文以Semaphore与CountDownLatch为例,深入解析AQS共享模式的工作原理。Semaphore通过AQS管理许可数量,控制资源的并发访问;而CountDownLatch则利用共享计数器实现线程间同步。两者均依赖AQS提供的tryAcquireShared和tryReleaseShared方法进行状态管理和线程调度,展示了AQS的强大功能和灵活性。
39 0
|
5月前
|
Java 开发者
震惊!Java多线程的惊天秘密:你真的会创建线程吗?
【6月更文挑战第19天】Java多线程创建有两种主要方式:继承Thread类和实现Runnable接口。继承Thread限制了多重继承,适合简单场景;实现Runnable接口更灵活,可与其它继承结合,是更常见选择。了解其差异对于高效、健壮的多线程编程至关重要。
34 2
|
存储 安全 Python
python多线程------>这个玩意很哇塞,你不来看看吗
python多线程------>这个玩意很哇塞,你不来看看吗
|
安全 Java 数据库连接
ThreadLocal Java多线程下的影分身之术
后来,我把c删掉,变成了下面这样。如果我现在想查h,按照上面getEntry的逻辑,是不是遍历到3就停了,所以找不到h了? getEntry的逻辑表面确实是这样,但实际上getEntryAfterMiss、remove、gets时都会直接或者间接调用expungeStaleEntry会对表里的数据做整理。expungeStaleEntry()除了利用弱引用的特性对tab中Entry做清理外,还会对之前Hash冲突导致后移的Entry重新安放位置。所以不可能出现下面这种tab排放的。
34 0
|
定位技术
Phaser(二):小恐龙跑酷游戏
创建地图放置障碍物添加玩家操作和动画玩家与障碍物碰撞游戏结束添加场景装饰云和石头完整代码
108 0
|
算法 Python
算法创作|龟兔赛跑问题解决方法
算法创作|龟兔赛跑问题解决方法
150 0
7-169 龟兔赛跑
7-169 龟兔赛跑
53 0
|
消息中间件 JavaScript 小程序
新来个阿里 P7,仅花 2 小时,撸出一个多线程永动任务,看完直接跪了,真牛逼!
新来个阿里 P7,仅花 2 小时,撸出一个多线程永动任务,看完直接跪了,真牛逼!
|
存储 监控 并行计算
又熬了一个通宵,肝了满满干货的线程池
由Doug Lea在JCP JSR-166 专家组成员的协助下撰写,并已发布到公共领域,如 creativecommons.org/publicdomai… 一个ExecutorService ,它使用可能是多个池线程中的一个来执行每个提交的任务,通常使用Executors工厂方法对其进行配置。 线程池解决了两个不同的问题:由于减少了每个任务的调用开销,它们通常在执行大量异步任务时提供改进的性能,并且它们提供了一种绑定和管理资源(包括线程)的方法,该资源在执行集合时消耗掉了任务。 每个ThreadPoolExecutor还维护一些基本统计信息,例如已完成任务的数量。 为了在广泛的上下文中有用