java多线程模拟龟兔赛跑

让乌龟和兔子在同一个赛道从1开始跑到100,看看谁更快.

 1 public class Racer implements Runnable{
 2     private static String winner;//胜利者
 3
 4     @Override
 5     public void run() {
 6         //赛道
 7         for (int step = 1; step <= 100; step++) {
 8  /* if(Thread.currentThread().getName().equals("兔子")&&step%50==0){
 9       try {
10           Thread.sleep(200);
11       } catch (InterruptedException e) {
12           e.printStackTrace();
13       }
14   }*/
15             System.out.println(Thread.currentThread().getName()+"---->走了"+step+"步");
16
17              boolean flag= GameOver(step);
18              if(flag){
19                  break;
20              }
21
22         }
23     }
24
25     private boolean GameOver(int step) {
26         if(winner!=null){
27             return true;
28         }else{
29             if(step==100){
30                 winner=Thread.currentThread().getName();
31                 System.out.println("胜利者是-->"+winner);
32             }
33         }
34         return false;
35     }
36
37     public static void main(String[] args) {
38         Racer racer = new Racer();
39         new Thread(racer,"兔子").start();
40         new Thread(racer,"乌龟").start();
41
42     }
43
44 }

运行结果:

兔子---->走了1步

...................

兔子---->走了98步
兔子---->走了99步
兔子---->走了100步
胜利者是-->兔子

怎么竟然是兔子赢了,可是现实中龟兔赛跑是乌龟赢了,我们加入线程睡眠要是兔子就让他睡一会,乌龟就可以赢了.

 1 public class Racer implements Runnable{
 2     private static String winner;//胜利者
 3
 4     @Override
 5     public void run() {
 6         //赛道
 7         for (int step = 1; step <= 100; step++) {
 8   if(Thread.currentThread().getName().equals("兔子")&&step%50==0){
 9       try {
10           Thread.sleep(200);
11       } catch (InterruptedException e) {
12           e.printStackTrace();
13       }
14   }
15             System.out.println(Thread.currentThread().getName()+"---->走了"+step+"步");
16
17              boolean flag= GameOver(step);
18              if(flag){
19                  break;
20              }
21
22         }
23     }
24
25     private boolean GameOver(int step) {
26         if(winner!=null){
27             return true;
28         }else{
29             if(step==100){
30                 winner=Thread.currentThread().getName();
31                 System.out.println("胜利者是-->"+winner);
32             }
33         }
34         return false;
35     }
36
37     public static void main(String[] args) {
38         Racer racer = new Racer();
39         new Thread(racer,"兔子").start();
40         new Thread(racer,"乌龟").start();
41
42     }
43
44 }

运行结果:

乌龟---->走了96步
乌龟---->走了97步
乌龟---->走了98步
乌龟---->走了99步
乌龟---->走了100步
胜利者是-->乌龟
兔子---->走了50步

这下不管怎么跑都是乌龟赢了.

原文地址:https://www.cnblogs.com/xiaoqiqistudy/p/10984279.html

时间: 2024-10-31 07:02:25

java多线程模拟龟兔赛跑的相关文章

java多线程模拟生产者消费者问题,公司面试常常问的题。。。

package com.cn.test3; //java多线程模拟生产者消费者问题 //ProducerConsumer是主类,Producer生产者,Consumer消费者,Product产品 //Storage仓库 //批注:我把输出结果写在程序以下了,你能够看一下,事实上非常easy的,你想象一下产品从生产,到取出的一个生产线,我们定义两个线程,生产者线程,和消费者线程,一个是生产者不停的生产产品并放入数量有限的指定槽内,而消费者从指定槽依次取出产品,现实中的流水车间也相似于此. publ

java多线程模拟停车系统

import java.util.Random; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; import java.util.concurrent.Semaphore; import java.util.concurrent.SynchronousQueue; import sun.awt.geom.AreaOp.IntOp; /** * * @author

java多线程模拟红绿灯案例

代码Lighter.java: 1 package pack1; 2 /** 3 * 灯线程 4 * @author Administrator 5 * 6 */ 7 public class Lighter extends Thread{ 8 //代表灯当前的状态(这里只考虑红绿两种状态) 9 public String state; 10 public void run(){ 11 while (true){ 12 try { 13 //初始状态设为红灯,且红灯时常为10s 14 state

java多线程模拟停车位问题

/** * */ package Synchronized; /** * @author libin * */ public class CarTest { public static void main(String[] args) { CarSet car1 = new CarSet(); Thread t1 = new InThread("1",car1); Thread t2 = new InThread("2",car1); Thread t3 = new

java中多线程模拟(多生产,多消费,Lock实现同步锁,替代synchronized同步代码块)

import java.util.concurrent.locks.*; class DuckMsg{ int size;//烤鸭的大小 String id;//烤鸭的厂家和标号 DuckMsg(){ } DuckMsg(int size, String id){ this.size=size; this.id=id; } public String toString(){ return id + " 大小为:" + size; } } class Duck{ private int

JAVA学习第六十课 — UDP协议 &amp;基于多线程模拟简单的QQ聊天程序

UDP传输 UDP有发送端和接受端,有两大类,DatagramSocket.DatagramPacket 建立发送端和接收端 建立数据包 调用Socket的接收发送方法 关闭Socket 注意:发送端和接收端是两个独立的运行程序 UDP发送端演示 DatagramPacket(byte[] buf, int length, InetAddress address, int port) 构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号. public static voi

java多线程 —— 两种实际应用场景模拟

java多线程-两种实际应用场景模拟 转自 薛定谔的猫 (一) 先说说第一个,模拟对信息的发送和接收.场景是这样的: 就像笔者之前做的消息的发送,一个是服务器,一个是客户端.发送的话,要保证信息100%的发送给客户端,那么发给客户端之后,客户端返回一个消息告诉服务器,已经收到.当服务器一直没有收到客户端返回的消息,那么服务器会一直发送这个信息,直到客户端发送回确认信息,这时候再删除重复发送的这个信息. 为了模拟这个场景,这里写两个线程,一个是发送,一个是接收,把发送的信息,要保存到线程安全的对象

java 多线程 总结 案例

学完东西后,要学会总结,学会记录笔记,这样才会有更大的收获 首先我们了解线程和进程的基本概念 一.概念(程序 进程 线程) 1.程序:指令集 静态概念 2.进程:操作系统 调度程序 动态概念 3:线程:在进程内多条执行路径 真正的多线程是指多个cpu 二.创建 1.1  继承Thread +run() 启动:创建类对象+对象.start() package com.org.pc; /** * 模拟龟兔赛跑 * @author lyy * 创建多线程 继承Thread 重写run(线程体) * 使

Rhythmk 一步一步学 JAVA (21) JAVA 多线程

1.JAVA多线程简单示例 1.1 .Thread  集成接口 Runnable 1.2 .线程状态,可以通过  Thread.getState()获取线程状态: New (新创建) Runnable (可以运行) Blocked  (被阻塞) Waiting  (等待) Timed waiting (计时等待) Terminated  (被终止) ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27