编写Java程序,跑道长 50m,模拟 3 名学生同时在跑道跑步的场景 3名同学相当于3个线程对象

简介: 编写Java程序,跑道长 50m,模拟 3 名学生同时在跑道跑步的场景 3名同学相当于3个线程对象

需求说明:


跑道长 50m,模拟 3 名学生同时在跑道跑步的场景 3名同学相当于3个线程对象


14.png


实现思路:

创建 Java 项目,在项目中创建StudentRunning类,该类继承 Thread 类

重写 StudentRunning类的 run() 方法,实现模拟变量自增 在类中定义 String 类型的变量 name,用来保存学生的姓名

在类中定义有参构造方法,目的通过构造方法给实例变量 name赋值

在 StudentRunning 类的 main() 方法内,使用有参构造方法创建 3 个线程对象,实参 name 的值即 3 名学生的姓名

依次调用 3 条线程的 start() 方法,启动线程


实现代码:


方法一:

public class StudentRuning extends Thread {
  //创建构造方法,变量用来保存名字
  private String name;
  public StudentRuning(String name) {
    super(name);
    this.name = name;
  }
  @Override
  public void run() {
    super.run();
    for (int i = 0; i < 50; i++) {
      System.out.println(this.name+"同学跑了"+i+"米");
    }
  }
  //创建三条进程并启动
  public static void main(String[] args) {
    new StudentRuning("小明").start();
    new StudentRuning("小安").start();
    new StudentRuning("小春").start();
  }
}


方法二:


public class StudentRuning extends Thread {
  @Override
  public void run() {
    super.run();
    for (int i = 1; i <= 50; i++) {
      System.out.println(this.getName()+"同学跑了"+i+"米");
    }
  }
  //创建三条进程并启动
  public static void main(String[] args) {
    StudentRuning s1 = new StudentRuning();
    s1.setName("小明");
    s1.start();
    StudentRuning s2 = new StudentRuning();
    s2.setName("大牛");
    s2.start();
    StudentRuning s3 = new StudentRuning();
    s3.setName("老王");
    s3.start();
  }
}
相关文章
|
2月前
|
安全 Java
线程安全的艺术:确保并发程序的正确性
在多线程环境中,确保线程安全是编程中的一个核心挑战。线程安全问题可能导致数据不一致、程序崩溃甚至安全漏洞。本文将分享如何确保线程安全,探讨不同的技术策略和最佳实践。
46 6
|
2月前
|
安全 Java 编译器
Java对象一定分配在堆上吗?
本文探讨了Java对象的内存分配问题,重点介绍了JVM的逃逸分析技术及其优化策略。逃逸分析能判断对象是否会在作用域外被访问,从而决定对象是否需要分配到堆上。文章详细讲解了栈上分配、标量替换和同步消除三种优化策略,并通过示例代码说明了这些技术的应用场景。
Java对象一定分配在堆上吗?
|
3月前
|
Java API
Java 对象释放与 finalize 方法
关于 Java 对象释放的疑惑解答,以及 finalize 方法的相关知识。
56 17
|
2月前
|
存储 安全 Java
Java编程中的对象序列化与反序列化
【10月更文挑战第22天】在Java的世界里,对象序列化和反序列化是数据持久化和网络传输的关键技术。本文将带你了解如何在Java中实现对象的序列化与反序列化,并探讨其背后的原理。通过实际代码示例,我们将一步步展示如何将复杂数据结构转换为字节流,以及如何将这些字节流还原为Java对象。文章还将讨论在使用序列化时应注意的安全性问题,以确保你的应用程序既高效又安全。
|
2月前
|
缓存 监控 Java
Java 线程池在高并发场景下有哪些优势和潜在问题?
Java 线程池在高并发场景下有哪些优势和潜在问题?
|
3月前
|
Java 开发者
如何通过易语言多线程提升程序响应速度?
如何通过易语言多线程提升程序响应速度?
|
2月前
|
存储 缓存 NoSQL
一篇搞懂!Java对象序列化与反序列化的底层逻辑
本文介绍了Java中的序列化与反序列化,包括基本概念、应用场景、实现方式及注意事项。序列化是将对象转换为字节流,便于存储和传输;反序列化则是将字节流还原为对象。文中详细讲解了实现序列化的步骤,以及常见的反序列化失败原因和最佳实践。通过实例和代码示例,帮助读者更好地理解和应用这一重要技术。
53 0
|
3月前
|
监控 Java API
|
11天前
|
NoSQL Redis
单线程传奇Redis,为何引入多线程?
Redis 4.0 引入多线程支持,主要用于后台对象删除、处理阻塞命令和网络 I/O 等操作,以提高并发性和性能。尽管如此,Redis 仍保留单线程执行模型处理客户端请求,确保高效性和简单性。多线程仅用于优化后台任务,如异步删除过期对象和分担读写操作,从而提升整体性能。
34 1
|
3月前
|
存储 消息中间件 资源调度
C++ 多线程之初识多线程
这篇文章介绍了C++多线程的基本概念,包括进程和线程的定义、并发的实现方式,以及如何在C++中创建和管理线程,包括使用`std::thread`库、线程的join和detach方法,并通过示例代码展示了如何创建和使用多线程。
62 1