编写Java程序,车站只剩 50 张从武汉到北京的车票,现有 3 个窗口售卖,用程序模拟售票的过程

简介: 编写Java程序,车站只剩 50 张从武汉到北京的车票,现有 3 个窗口售卖,用程序模拟售票的过程

需求说明:


车站只剩 50 张从武汉到北京的车票,现有 3 个窗口售卖,用程序模拟售票的过程


15.png


实现思路:


创建SellTicket类实现 Runnable 接口,定义实例变量ticket赋值50,重写run方法

在run方法内,定义while 死循环。在循环体中,调用 Thread 类的静态方法

Thread.currentThread().getName() 获取当前运行线程的名称 ,打印线程名称和ticket变量值,然后让 ticket 自减。当 ticket 小于等于 0 时,结束循环

在测试类的 main() 方法内,创建SellTicket类实例一个

使用 new Thread(Runnable target) 构造方法开辟 3 条线程,并将 Runnable 实例 sellTicket 传给形参target

依次调用 3 个 Thread 类对象的 start() 方法,启动线程


实现代码:


16.png


使用Runnable解决:https://blog.csdn.net/weixin_44893902/article/details/108815711


while循环实现:


//SellTicket售票处类实现 Runnable 接口
public class SellTicket implements Runnable {
  int ticket = 50;// 剩余票数
  @Override
  public void run() {
    //while循环实现
      while (true) { 
        if (ticket<1) { 
          break; 
        } else {
         System.out.println(Thread.currentThread().getName()+"出售第"+ticket--+"张车票"); 
        }
      }
  }
  public static void main(String[] args) {
    SellTicket sellTicket = new SellTicket();
    Thread thread1 = new Thread(sellTicket);
    thread1.setName("窗口1");
    thread1.start();
    Thread thread2 = new Thread(sellTicket);
    thread2.setName("窗口2");
    thread2.start();
    Thread thread3 = new Thread(sellTicket);
    thread3.setName("窗口3");
    thread3.start();
  }
}


for循环实现:


//for循环实现
for (; ticket > 0; ticket--) {
  System.out.println(Thread.currentThread().getName()+"出售第"+ticket+"张车票"); 
  if(ticket==0) { 
    break; 
  } 
}
相关文章
|
3月前
|
Java 流计算
利用java8 的 CompletableFuture 优化 Flink 程序
本文探讨了Flink使用avatorscript脚本语言时遇到的性能瓶颈,并通过CompletableFuture优化代码,显著提升了Flink的QPS。文中详细介绍了avatorscript的使用方法,包括自定义函数、从Map中取值、使用Java工具类及AviatorScript函数等,帮助读者更好地理解和应用avatorscript。
利用java8 的 CompletableFuture 优化 Flink 程序
|
2月前
|
SQL 安全 Java
Java 异常处理:筑牢程序稳定性的 “安全网”
本文深入探讨Java异常处理,涵盖异常的基础分类、处理机制及最佳实践。从`Error`与`Exception`的区分,到`try-catch-finally`和`throws`的运用,再到自定义异常的设计,全面解析如何有效管理程序中的异常情况,提升代码的健壮性和可维护性。通过实例代码,帮助开发者掌握异常处理技巧,确保程序稳定运行。
58 1
|
2月前
|
IDE Java 编译器
开发 Java 程序一定要安装 JDK 吗
开发Java程序通常需要安装JDK(Java Development Kit),因为它包含了编译、运行和调试Java程序所需的各种工具和环境。不过,某些集成开发环境(IDE)可能内置了JDK,或可使用在线Java编辑器,无需单独安装。
103 1
|
2月前
|
存储 Java API
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
121 4
|
3月前
|
Java Maven 数据安全/隐私保护
如何实现Java打包程序的加密代码混淆,避免被反编译?
【10月更文挑战第15天】如何实现Java打包程序的加密代码混淆,避免被反编译?
565 2
|
3月前
|
安全 Java Linux
java程序设置开机自启
java程序设置开机自启
189 1
|
3月前
|
运维 Java Linux
【运维基础知识】Linux服务器下手写启停Java程序脚本start.sh stop.sh及详细说明
### 启动Java程序脚本 `start.sh` 此脚本用于启动一个Java程序,设置JVM字符集为GBK,最大堆内存为3000M,并将程序的日志输出到`output.log`文件中,同时在后台运行。 ### 停止Java程序脚本 `stop.sh` 此脚本用于停止指定名称的服务(如`QuoteServer`),通过查找并终止该服务的Java进程,输出操作结果以确认是否成功。
104 1
|
3月前
|
Java Python
如何通过Java程序调用python脚本
如何通过Java程序调用python脚本
53 0
|
13天前
|
监控 Java
java异步判断线程池所有任务是否执行完
通过上述步骤,您可以在Java中实现异步判断线程池所有任务是否执行完毕。这种方法使用了 `CompletionService`来监控任务的完成情况,并通过一个独立线程异步检查所有任务的执行状态。这种设计不仅简洁高效,还能确保在大量任务处理时程序的稳定性和可维护性。希望本文能为您的开发工作提供实用的指导和帮助。
64 17
|
23天前
|
Java
Java—多线程实现生产消费者
本文介绍了多线程实现生产消费者模式的三个版本。Version1包含四个类:`Producer`(生产者)、`Consumer`(消费者)、`Resource`(公共资源)和`TestMain`(测试类)。通过`synchronized`和`wait/notify`机制控制线程同步,但存在多个生产者或消费者时可能出现多次生产和消费的问题。 Version2将`if`改为`while`,解决了多次生产和消费的问题,但仍可能因`notify()`随机唤醒线程而导致死锁。因此,引入了`notifyAll()`来唤醒所有等待线程,但这会带来性能问题。
Java—多线程实现生产消费者