首页 > 编程语言 >java多线程模拟多个售票员从同一个票池售票

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

时间:2024-09-17 22:52:53浏览次数:10  
标签:售票 java Thread 线程 new 票池 多线程 售票员

程序功能

这段代码模拟了多个售票员从一个有限的票池中售票的过程。主要功能如下:
票池共有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();
    }
}

标签:售票,java,Thread,线程,new,票池,多线程,售票员
From: https://blog.csdn.net/C7211BA/article/details/142320404

相关文章

  • vscode配置java简易教程
    一、下载jdkjava官方地址:https://www.oracle.com/java/technologies/downloads/选择适合自己电脑的版本,并下载到一个自己喜欢的地方。二、配置环境变量记住自己jdk的地址,例:我的jdk下载到了D:\app\java1、JAVA_HOME配置点击win键后,搜索“环境变量”。如图,打开配置......
  • Java基于SpringBoot的付费自习室管理系统+Vue[毕业设计]
    文末获取资源,收藏关注不迷路文章目录项目介绍技术介绍项目界面关键代码目录项目介绍费自习室管理系统采用B/S架构,数据库是MySQL。网站的搭建与开发采用了先进的java进行编写,使用了springboot框架。该系统从两个对象:由管理员和用户来对系统进行设计构建。主要功能......
  • Java多种方式实现 有界缓冲区下的多个生产者、消费者模型 (Semaphore、while+wait+noti
    /**@Author:SongyangJi@ProjectName:[email protected]@Description:*/classProducerThreadextendsThread{intrate;MultiProducerConsumermultiProducerConsumer;publicProducerThread(intrate,MultiProducerConsumermultiProducer......
  • Java面向对象概括
    面向对象与面向过程的思想面向过程:亲力亲为,侧重于分析过程。面向对象:所有事情交给相应的对象完成,侧重于如何创建对象。可总结为下面三点:1.都可以实现代码重用和模块化编程,但是面对对象的模块化更深,数据更封闭,也更安全!因为面向对象的封装性更强!2.面对对象的思维方式更加贴近于现......
  • Java和数据库开发规范
    java开发规范第一节:命名风格1.方法名,参数名,成员变量都统一使用lowerCamelCase风格,必须遵从驼峰形式2.类名必须使用upperCamelCase风格,但以下情形例外:DAO/BO/PO/VO/UID3.常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字长4.代码中命名均不能以下......
  • JavaScript -- 数组数据类型
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="viewport"content="width=d......
  • JavaScript -- 数组的基本操作
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="viewport"content="width=d......
  • Java基于微信小程序的个人财务理财系统App+Vue[毕业设计]
    文末获取资源,收藏关注不迷路文章目录项目介绍技术介绍项目界面关键代码目录项目介绍时代在飞速进步,每个行业都在努力发展现在先进技术,通过这些先进的技术来提高自己的水平和优势,个人财务系统APP当然不能排除在外。个人财务系统APP是在实际应用和软件工程的开发原......
  • Java基于SpringBoot的个人健康管理网站+Vue[毕业设计]
    文末获取资源,收藏关注不迷路文章目录项目介绍技术介绍项目界面关键代码目录项目介绍系统根据现有的管理模块进行开发和扩展,采用面向对象的开发的思想和结构化的开发方法对个人健康管理的现状进行系统调查。采用结构化的分析设计,该方法要求结合一定的图表,在模块化......
  • 初学Java.Scanner
    publicclassDemo04{publicstaticvoidmain(String[]args){//我们要输入多个数字并且要求出总和与平均数,每输入一个数字用回车确认,通过输入非数字来结束输入并且执行输出结果Scannersc=newScanner(System.in);//和doublesum=0;//计算输入多少......