当前位置: 首页 > article >正文

java多线程模拟多个售票员从同一个票池售票

程序功能

这段代码模拟了多个售票员从一个有限的票池中售票的过程。主要功能如下:
票池共有50张票,多个售票员(线程)并发进行售票。
使用同步机制确保线程安全,避免多个售票员同时出售同一张票。
每个售票员不断检查票池是否有票,有票则售出一张,直到票池中的票售完为止。
在这里插入图片描述

代码

class TicketSeller implements Runnable {
    // 票池中的剩余票数
    private static int tickets = 50;

    // 模拟售票方法
    @Override
    public void run() {
        while (true) {
            // 同步代码块,保证多个线程安全操作票池
            synchronized (TicketSeller.class) {
                if (tickets > 0) {
                    // 模拟售票过程
                    System.out.println(Thread.currentThread().getName() + " 正在售出第 " + tickets + " 张票");
                    tickets--;

                    // 模拟售票需要一些时间
                    try {
                        Thread.sleep(100); // 休眠 100 毫秒
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                } else {
                    // 如果票卖完了,退出售票
                    System.out.println(Thread.currentThread().getName() + ":票已售罄");
                    break;
                }
            }
        }
    }

    public static void main(String[] args) {
        // 创建三个售票员线程
        Thread seller1 = new Thread(new TicketSeller(), "售票员1");
        Thread seller2 = new Thread(new TicketSeller(), "售票员2");
        Thread seller3 = new Thread(new TicketSeller(), "售票员3");

        // 启动售票员线程
        seller1.start();
        seller2.start();
        seller3.start();
    }
}


http://www.kler.cn/news/309177.html

相关文章:

  • c++面试-语法糖(一)
  • 54. 二叉搜索树的第 k 大节点
  • 09年408考研真题-数据结构
  • MATLAB|基于多时段动态电价的电动汽车有序充电策略优化
  • 【Qt】实现模拟触摸屏 上下滑动表格 的两种方式
  • 产品经理学AI:搭建大模型应用常用的三种方式
  • 【我的 PWN 学习手札】Fastbin Attack
  • TVM和EVM的比较
  • 费解的开关
  • 【常用集合】深入浅出Map集合
  • 如何在微服务的日志中记录每个接口URL、状态码和耗时信息?
  • python中Web开发框架的使用
  • 多速率信号处理
  • sourceTree使用笔记
  • ClickHouse的安装配置+DBeaver远程连接
  • DP子序列问题
  • Spring Boot-静态资源管理问题
  • Spring Cloud全解析:服务调用之Feign的编解码器
  • WebSocket 协议
  • VMware vSphere 8.0 Update 3b 发布下载,新增功能概览
  • 飞速爆单!TikTok跨境选品逻辑大揭秘!
  • socat用法结合案例分析
  • 我的AI工具箱Tauri版-MoYin文本转语音
  • 算法训练——day14字母异位词
  • 计算机三级网络技术总结(二)
  • 【D3.js in Action 3 精译_022】3.2 使用 D3 完成数据准备工作
  • Golang | Leetcode Golang题解之第400题第N位数字
  • 通信工程学习:什么是LCAS链路容量调整机制
  • LLM大模型基础知识学习总结,零基础入门到精通 非常详细收藏我这一篇就够了
  • 1.接口测试基础