编写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; 
  } 
}
相关文章
|
30天前
|
Java 流计算
利用java8 的 CompletableFuture 优化 Flink 程序
本文探讨了Flink使用avatorscript脚本语言时遇到的性能瓶颈,并通过CompletableFuture优化代码,显著提升了Flink的QPS。文中详细介绍了avatorscript的使用方法,包括自定义函数、从Map中取值、使用Java工具类及AviatorScript函数等,帮助读者更好地理解和应用avatorscript。
利用java8 的 CompletableFuture 优化 Flink 程序
|
9天前
|
存储 Java API
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
21 4
|
20天前
|
Java Maven 数据安全/隐私保护
如何实现Java打包程序的加密代码混淆,避免被反编译?
【10月更文挑战第15天】如何实现Java打包程序的加密代码混淆,避免被反编译?
33 2
|
22天前
|
安全 Java Linux
java程序设置开机自启
java程序设置开机自启
|
25天前
|
运维 Java Linux
【运维基础知识】Linux服务器下手写启停Java程序脚本start.sh stop.sh及详细说明
### 启动Java程序脚本 `start.sh` 此脚本用于启动一个Java程序,设置JVM字符集为GBK,最大堆内存为3000M,并将程序的日志输出到`output.log`文件中,同时在后台运行。 ### 停止Java程序脚本 `stop.sh` 此脚本用于停止指定名称的服务(如`QuoteServer`),通过查找并终止该服务的Java进程,输出操作结果以确认是否成功。
32 1
|
27天前
|
Java Python
如何通过Java程序调用python脚本
如何通过Java程序调用python脚本
25 0
|
1月前
|
消息中间件 NoSQL Java
Flink-06 Flink Java 3分钟上手 滚动窗口 时间驱动 Kafka TumblingWindow TimeWindowFunction TumblingProcessing
Flink-06 Flink Java 3分钟上手 滚动窗口 时间驱动 Kafka TumblingWindow TimeWindowFunction TumblingProcessing
35 0
|
1月前
|
Java
java的程序记录时间
java的程序记录时间
24 0
|
9天前
|
安全 Java
java 中 i++ 到底是否线程安全?
本文通过实例探讨了 `i++` 在多线程环境下的线程安全性问题。首先,使用 100 个线程分别执行 10000 次 `i++` 操作,发现最终结果小于预期的 1000000,证明 `i++` 是线程不安全的。接着,介绍了两种解决方法:使用 `synchronized` 关键字加锁和使用 `AtomicInteger` 类。其中,`AtomicInteger` 通过 `CAS` 操作实现了高效的线程安全。最后,通过分析字节码和源码,解释了 `i++` 为何线程不安全以及 `AtomicInteger` 如何保证线程安全。
java 中 i++ 到底是否线程安全?
|
4天前
|
存储 设计模式 分布式计算
Java中的多线程编程:并发与并行的深度解析####
在当今软件开发领域,多线程编程已成为提升应用性能、响应速度及资源利用率的关键手段之一。本文将深入探讨Java平台上的多线程机制,从基础概念到高级应用,全面解析并发与并行编程的核心理念、实现方式及其在实际项目中的应用策略。不同于常规摘要的简洁概述,本文旨在通过详尽的技术剖析,为读者构建一个系统化的多线程知识框架,辅以生动实例,让抽象概念具体化,复杂问题简单化。 ####