Java实现多线程模拟龟兔赛跑

Java多线程模拟龟兔赛跑,供大家参考,具体内容如下

笔者利用Java多线程技术,将兔子和乌龟的跑步以两个线程的方式模拟出来,以达到一个初步的效果。
题目如下:路程总距离为35米
兔子:每秒跑5米,每跑10米,休息2秒;
乌龟:每秒跑3米,不休息。

所用工具

JDK1.8+IntelliJ IDEA 2020.1

代码

Race.java:(线程类,通过new出来的对象的不同线程名,然后分别模拟兔子和乌龟的跑步)

package task;
import org.omg.Messaging.SYNC_WITH_TRANSPORT;
public class Race extends Thread {
  private int mile=35;//剩下的路程
  public int getMile() {
    return mile;
  }
  public void setMile(int mile) {
    this.mile = mile;
  }
  public void run(){
    long time1=System.currentTimeMillis();//记录开始跑的时间
    if(getName().equals("兔子")){
      while(mile>0) {
        if ((int)(System.currentTimeMillis()-time1) % 2000 == 0 && (int)(System.currentTimeMillis()-time1) != 0) {//每跑10米即每过2秒休息2秒
          try {
            System.out.println("兔子正在休息2秒");
            Thread.sleep(2000);
          } catch (InterruptedException e) {
            e.printStackTrace();
          }
        }
        if((int)(System.currentTimeMillis()-time1)%1000==0&& (int)(System.currentTimeMillis()-time1) != 0) {
          try {
            Thread.sleep(1000);
            mile -= 5;
            System.out.println("兔子跑了"+(35-mile)+"米");//35-mile即为跑过的距离
          }catch(InterruptedException e){
            e.printStackTrace();
          }
        }
      }
      System.out.println("兔子到达终点");
    }else if(getName().equals("乌龟")){
      while(mile>0){
        if((int)(System.currentTimeMillis()-time1)%1000==0&& (int)(System.currentTimeMillis()-time1) != 0) {
          try {
            Thread.sleep(1000);
            mile -= 3;
            if(mile<0){
              mile=0;
            }
            System.out.println("乌龟跑了"+(35-mile)+"米");//35-mile即为跑过的距离
          }catch(InterruptedException e){
            e.printStackTrace();
          }
        }
      }
      System.out.println("乌龟到达终点");
    }else{

    }
  }
}

测试类demoo.java:(通过设置线程优先级来实现乌龟先跑,否则线程执行顺序不可控!!!)

package task;
public class demoo {
  public static void main(String[] args) {
    Thread rabbit=new Race();
    rabbit.setName("兔子");
    Thread turtle=new Race();
    turtle.setName("乌龟");
    turtle.setPriority(Thread.MAX_PRIORITY);
    rabbit.setPriority(Thread.MIN_PRIORITY);
    turtle.start();
    rabbit.start();
  }
}

测试结果:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Java多线程实现方块赛跑小游戏

    本文实例为大家分享了Java实现方块赛跑小游戏的具体代码,供大家参考,具体内容如下 在一个图形界面上构造两个位于同一起跑线方块,起跑线位于界面靠左位置, A 方块先开始运动,向右移动 50 像素后停止,B 方块开始运动,向右移动 100 像素后停 止,A 方块继续向右运动 100 像素后停止,B 方块开始运动,如此循环接替执行,直至 某一个方块到达终点,界面显示该方块胜利信息. 1)  自定义一个threadA,ThreadB, ThreadFrame类(均继承自Thread). 2)  定义全

  • Java实现多线程模拟龟兔赛跑

    Java多线程模拟龟兔赛跑,供大家参考,具体内容如下 笔者利用Java多线程技术,将兔子和乌龟的跑步以两个线程的方式模拟出来,以达到一个初步的效果. 题目如下:路程总距离为35米 兔子:每秒跑5米,每跑10米,休息2秒: 乌龟:每秒跑3米,不休息. 所用工具 JDK1.8+IntelliJ IDEA 2020.1 代码 Race.java:(线程类,通过new出来的对象的不同线程名,然后分别模拟兔子和乌龟的跑步) package task; import org.omg.Messaging.SY

  • Java利用多线程模拟银行系统存钱问题

    目录 多线程6(模拟银行系统存钱) 1.题目 2.解题思路 3.代码详解 多线程6(模拟银行系统存钱) 1.题目 模拟一个简单的银行系统,使用两个不同的线程向同一个账户存钱. 实现:使用synchronized关键字,将存钱的方法修改成同步的. 2.解题思路 创建一个类:SynchronizedBankFrame,继承JFrame类 写一个内部类Bank 定义一个account变量,来表示账户. deposit():一个存钱的方法 getAccount():显示账户余额的方法. 写一个内部类Tr

  • Java多线程解决龟兔赛跑问题详解

    目录 多线程4(龟兔赛跑-休眠线程) 1.题目 2.解题思路 3.代码详解 多线程4(龟兔赛跑-休眠线程) 1.题目 在龟兔赛跑中,领先的兔子因为通宵写博客,中途太累睡着了,跑输了乌龟.这个故事说明了兔子是爱学习的同学.咳咳,通宵是不可取的,大家别学. 实现:使用线程休眠模拟龟兔赛跑比赛 2.解题思路 创建一个类:RaceFrame,继承了JFrame.用来界面显示两个文本区域,用来输出乌龟和兔子的比赛记录,比赛开始按钮用来开始比赛. 编写内部类:Rabbit,该类实现了Runnable接口,在

  • java多线程模拟抢红包功能

    今天有朋友问我一道面试题,有5个人抢5个红包,可重复抢,用多线程程序实现,实现方式有多种,分享一下我的思路:应用了阻塞队列的特性. /** * Created by zhanglinqiang on 2016/6/23. */ public class MyTest { public static void main(String[] args) throws InterruptedException { LinkedBlockingQueue<LuckyMoney> luckyMoneys

  • Java多线程模拟电影售票过程

    用多线程模拟电影售票过程(Java实训) 实训目的: 多线程的实现.线程同步 实训要求: 总票数和售票窗口数由键盘输入,用每个线程处理一个窗口的售票. Test.java package program5; import java.util.Scanner; public class Test { public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc=new Scanner(S

  • Java实战之多线程模拟站点售票

    一.实验题目 二.分析 哦吼,这次的实验题目是一道非常经典的多线程买票问题.题目要求我们创建5个线程来模拟卖票,当然这其中就包含多线程存在也就是我们要解决的问题,重复卖票和超额卖票.即多个窗口卖出同一张票以及窗口卖出非正数编号的票. 不过这个问题可以先放一下,我们先来创建基础的线程模型,并在主方法中创建五个线程让他们跑起来: 话不多说,上代码. public class Ticket { public static void main(String[] args) { for(int i = 1

  • java多线程模拟交通灯管理系统

    本文实例为大家分享了java多线程模拟交通灯管理系统的具体代码,供大家参考,具体内容如下 一.项目业务逻辑分析 项目需求:模拟实现十字路口的交通灯管理系统逻辑,要求如下: 异步随机生成按照各个路线行驶的车辆,例如由北向南行驶的车辆.由东向南行驶的车辆. 信号灯忽略黄灯,只考虑红灯和绿灯的情况. 左转受信号灯控制,右转车辆不受信号灯控制,其他情况与现实生活的逻辑相同. 注:南北向车辆和东西向方向车辆交替放行,同方向等待车辆应先放行直行车辆,而后再放行左转车辆. 每辆车通过路口所需时间为1秒(提示:

  • Java多线程模拟银行系统存钱问题详解

    目录 一.题目描述 二.解题思路 三.代码详解 多学一个知识点 一.题目描述 题目:模拟一个简单的银行系统,使用两个不同的线程向同一个账户存钱. 实现:使用特殊域变量volatile实现同步. 二.解题思路 创建一个类:SynchronizedBankFrame,继承JFrame类 写一个内部类Bank 定义一个account变量,来表示账户. deposit():一个存钱的方法 getAccount():显示账户余额的方法. 写一个内部类Transfer,实现Runnable接口 在run方法

  • java中多线程的超详细介绍

    1.线程概述 几乎所有的操作系统都支持同时运行多个任务,一个任务通常就是一个程序,每个运行中的程序就是一个进程.当一个程序运行时,内部可能包含了多个顺序执行流,每个顺序执行流就是一个线程. 2.线程与进程 进程概述: 几乎所有的操作系统都支持进程的概念,所有运行中的任务通常对应一个进程( Process).当一个程序进入内存运行时,即变成一个进程.进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位. 进程特征: 1.独立性:进程是系统中独立存在的实体,

  • java基础——多线程

    目录 java多线程 并发与并行: 多线程使用场景: 创建线程的方式: Thread类的有关方法: 线程的同步: 1. 同步代码块: 2. synchronized还可以放在方法声明中,表示整个方法为同步方法. 总结 java多线程 并发与并行: 并行: 指两个或多个事件在同一时刻发生 ( 同时发生 ) . 并发: 指两个或多个事件在同一个时间段内发生. 多线程使用场景: 1. 后台任务,比如游戏服务器 2.定时向大量用户(100W)用户发邮件 3.异步处理: 发微博/记录日志等 4.分布式计算

随机推荐