【Java多线程手写代码】(二):利用多线程模拟动车票售卖

java多线程模拟购买火车票 java多线程模拟购买火车票 本次做的是一个火车票的售卖模拟,不管用户是在窗口还是APP上购买,必然不可能买到同一张票这也就是说一张票的售卖必然是一个单线程在操作的,所以,我们在写代码是也要注意这一点 ... 阅读详情

我是少侠露飞。学习塑造人生,技术改变世界。

引言

利用多线程售卖火车票也是多线程手写代码的常见问题。需求很简单:创建若干线程代表车票售卖窗口,每个窗口售卖的车票不能有重复,要求写代码实现。

利用wait/notifyAll机制实现

public class Main {
    public static void main(String[] args) {
        Ticket ticket = new Ticket();
        Thread t1 = new Thread(ticket);
        Thread t2 = new Thread(ticket);
        Thread t3 = new Thread(ticket);
        Thread t4 = new Thread(ticket);
        t1.setName("窗口A");
        t2.setName("窗口B");
        t3.setName("窗口C");
        t4.setName("窗口D");
        t1.start();
        t2.start();
        t3.start();
        t4.start();
    }
}

class Ticket implements Runnable {
    int serialNumber = 1;

    //synchronized为线程加锁,保证每次只有一个线程拿到锁进行售票
    @Override
    public synchronized void run() {
        while (true) {
            if (serialNumber <= 100) {
                System.out.println(Thread.currentThread().getName() + "卖出" + serialNumber + "号票");
                serialNumber++;
            }
            try {
                // 这里wait()休眠一段时间,表示当前线程释放锁,别的线程可以拿到锁进行售票
                // 注意wait()方法必须在synchronized代码里使用,因为想要释放锁的前提是,你必须首先持有锁
                this.wait(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

我是少侠露飞,咱们下期见。

多线程模拟售卖车票 一组一起实现某种功能的代码集合,静态(需手动运行,没运行就是死的)(进程是操作系统资源分配、调度、和管理的最小单位)正在运行的程序,当程序运行完成,即进程结束。每个独立执行的程序称为进程,各自占有独立的内存空间,之间的交互比较困难(线程是CPU资源分配、调度、和管理的最小单位)一个进程中可以有多条执行链路,这些执行链路成为线程一个进程死亡,这个进程中所有线程都会死亡线程销毁,进程未必关闭并行:多CPU执行各种不同的任务并发:一个CPU执行不同的任务。 阅读详情

相关推荐

多线程(模拟卖火车票)(java内存模型)

threadlocal局部变量 package com.example.test; /** * threadLocal局部变量 * @author gds * */ class Res { public Integer count = 0; public static ThreadLocal<Integer> threadLocal = new ThreadL...

龚道松 406

java使用多线程同步方法模拟三个窗口售票

在 Java 中,可以使用多线程同步方法来模拟三个窗口售票。 首先,定义一个类表示售票窗口,该类需要有一个共享的计数器表示当前剩余的票数。然后,在该类中定义一个同步方法来执行售票操作,该方法应该检查是否有剩余的票,如果有,则将计数器减 1,并打印出售出一张票的消息。 最后,创建三个线程,分别代表三个售票窗口,并启动这三个线程。 示例代码如下: publicclass TicketWindow ex...

weixin_35754676的博客 1068

火车票购票系统模拟

“` package zhang; public class DSDS { public static void main(String[] args) { ThreadSellTciket sTicket=new ThreadSellTciket(); //创建属于类ThreadSellTciket的对象sTicket ne

JZlixin的博客 3788

【Java篇】Java多线程完成火车票售卖案例

我们在学习Java多线程时,可能最典型的一个案例就是火车票售卖,那么如何在不重复售票的情况下卖出全部火车票,我们通过Java多线程来完成,并根据 synchronized 同步锁关键字来限制同时卖出一张票的情况!

破烂码农 4480

简单实现多线程同步示例(模拟购票系统)

简单实现多线程同步示例(模拟购票系统),内容为实现多线程同步过程,模拟购票系统进行同步购买情况;该处并未考虑线程守护问题,后期将对线程锁等安全问题进行初步研究!

Hi3516CV610 YOLOv8模型转换与部署实战:从源码到板端推理全流程解析

本文详细解析了将YOLOv8模型部署到Hi3516CV610开发板的全流程。内容涵盖从Ubuntu环境搭建、模型获取与验证,到关键的PyTorch模型转换为ONNX格式,并利用海思工具链量化生成板端可执行的.wk文件。最后,指导开发者编写板端C程序,完成视频流处理、NNIE推理及结果后处理,并提供了部署调试与性能优化的实用技巧。

weixin_29215815的博客 268

火车卖票,线程实现

火车卖票

m0_72631343的博客 310

dify工作流的原理

摘要: Dify 工作流是一个基于有向无环图(DAG)的智能任务编排系统,支持多节点(如LLM调用、API工具、条件分支等)的可视化拖拽与流程编排。其核心原理包括执行引擎(解析DAG并管理节点依赖)、上下文变量传递(类Jinja模板的变量引用机制)和状态持久化(存储执行日志与中间结果)。工作流通过事件驱动执行,支持异步任务调度,并与RAG知识库、LLM服务等模块深度集成,最终可发布为API或对话应用。技术栈基于Python(FastAPI+Celery)和PostgreSQL,实现低代码化的AI应用开发。

nbspzs的专栏 2187

JavaSE_day44(多线程实际运用:火车卖票

关键字:synchronized:同步(锁),可以修饰代码块和方法,被修饰的代码块和方法一旦被某个线程访问,则直接锁住,* 李四用完测试了,把锁打开了,肚子又不舒服了,扭头回去了,又把门锁上了,* 张三来了,一看门是绿的,他就进去了,把门锁上了,门就变红了。* 李四一看门变绿了,他就进去了,把门锁上,门就变红了。* 张三用完了厕所,把锁打开了,门就变成了绿色。* 李四来了,一看门市红色的,他就只能憋着。* 王五来了,一看们是红色的,他也只能憋着。* 注意:锁对象需要被所有的线程所共享。

weixin_52479647的博客 692

别再死记硬背MAML原理了!用PyTorch手撸一个Omniglot小样本分类器(附完整代码)

本文详细介绍了如何使用PyTorch实现MAML(模型无关的元学习)算法,构建一个Omniglot小样本分类器。通过实战代码演示,帮助读者理解MAML的双层优化原理,并提供了完整的训练循环、网络架构设计及调试技巧,适合想要掌握元学习技术的开发者。

weixin_29191669的博客 131

MagicDraw小白必看:BDD图中模块的5种属性详解(含SysML v1.6最新端口配置指南)

本文面向MagicDraw初学者,详细解析SysML BDD图中模块的五种核心结构属性,包括组成部分、引用、值、约束属性及端口。重点阐述了SysML v1.6中端口设计的范式转移,对比了完整端口与代理端口的区别与应用场景,并通过实战案例指导如何利用代理端口进行清晰的接口定义与系统架构设计。

rum55的博客 374

java多线程卖火车票_多线程(让你学习怎么卖车票)

模拟场景:火车站卖票,50张票,分三个窗口进行售卖(三个线程)问题抛出第一种方式:继承Thread类public class TicketSellByThread extends Thread {//定义一共有 50 张票,注意声明为 static,表示几个窗口共享public static int num = 50;public TicketSellByThread(String name) ...

weixin_39524048的博客 560

CAN总线开发必看:报文发送类型全解析(含Cycle/Event/CE/IfActive对比)

本文深入解析CAN总线开发中的四种报文发送类型(Cycle/Event/CE/IfActive),对比其核心特征与工程应用场景。通过典型ECU交互案例和决策矩阵,帮助开发者根据实时性、总线效率等需求选择最优方案,并详解信号发送模式与恢复机制,提升车载网络通信可靠性。

weixin_30632089的博客 314

多线程 模拟火车票售卖场景

一、模拟火车票售卖场景,三个窗口售卖A-B地的火车票,火车票共100张。 要求: 编号1-100 打印示例:窗口1售卖火车票66 窗口:写3个线程, import java.util.Random; /** * @auther: 巨未 * @DATE: 2019/4/12 0012 23:18 * @Description: */ class Tickets { privat...

Jewel’s blog 1319

GAN模型中的常见变体有哪些,如DCGAN、WGAN和CGAN等?

生成对抗网络(GAN)是一种强大的深度学习模型,它由生成器和判别器两个网络组成,通过对抗训练的方式实现生成数据的能力。随着研究的发展,出现了许多GAN的变体,每个变体都有其独特的改进和特点。

huidhsu的博客 2262

制作INCA和CANape通用的A2L

CANape和INCA通用的A2L配置与修改

赞的博客 5962

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

查看本章节 查看作业目录 需求说明: 车站只剩 50 张从武汉到北京的车票,现有 3 个窗口售卖,用程序模拟售票的过程 实现思路: 创建SellTicket类实现 Runnable 接口,定义实例变量ticket赋值50,重写run方法 在run方法内,定义while 死循环。在循环体中,调用 Thread 类的静态方法 Thread.currentThread().getName() 获取当前运行线程的名称 ,打印线程名称和ticket变量值,然后让 ticket 自减。当 ticket

杨明金的博客 4859

Win11 1 月更新黑屏循环故障技术分析与解决方案

2026年1月30日Windows 11更新引发黑屏循环故障,主要影响2018年前出厂、采用MBR分区及特定BIOS固件的设备,尤其对使用经典版Outlook(POP协议)的用户影响显著。故障表现为系统无限重启黑屏,导致数据访问中断。分析表明,问题源于硬件兼容性、分区格式与系统更新的交互冲突。解决方案包括进入安全模式回滚更新、暂停自动更新、升级驱动/BIOS,以及等待微软官方补丁。建议用户更新前评估硬件兼容性并备份数据,企业环境应建立分阶段更新测试机制。该事件为系统更新风险管理提供了重要参考。

博客 1442

【Java基础】多线程实例----三个窗口同时售卖100张车票【详解源码实现】

本一节作为前一节多线程的补充说明,旨在解决多线程问题中的线程安全问题的解决。 问题描述 假设售票厅有3个窗口可以售卖某次列车的最后100张车票,这三个窗口可以看做三个线程,100张车票可以看做三个线程共享的资源,仔细分析,这个问题中存在线程安全问题。 一.直接实现售票 1.继承Thread类,重run()方法 /** * 三个窗口买票:共售100张票 * 存在线程安全的问题 * @author wds * @date 2021-11-15-20:30 */ public class ThreadT

weixin_46081857的博客 1万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

火车票售卖

package xiao;public class XXiao {public static void main(String[] args) { // TODO 自动生成的方法存根 ThreadSellTciket sTicket=new ThreadSellTciket(); //创建属于类ThreadSellTciket的对象sTicket。

hehuilun的博客 435

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

多线程模拟售卖火车票

模拟火车站卖票: 现在有窗口1, 窗口2, 窗口3同时卖一个车厢的100张火车票, 要求不能卖出重复的票,卖完就结束卖票. package 作业; /** * company: www.abc.com * Author: Administrator * Create Data: 2019/8/13 */ /*模拟火车站卖票: 现在有窗口1, 窗口2, 窗口...

qq_34444599的博客 930

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

线程Thread练习题1买票,使用多线程的方式模拟四个窗口卖100张票

package com.briup.day19; import work.Person; /** * 5.使用多线程的方式来模拟多个窗口买票 要求销售100张火车票,要求有4个窗口来进行销售, 请编写多线程程序来模拟这个效果 * @author MECHREVO * */ public class WorkSell extends Thread{ public WorkSell() { } public WorkSell(String name) { super(name); } .

Mirliu520的博客 2919

模拟卖火车票(Java创建线程)

/** * */ package com.gds.ticket; /** * @author 龚道松 * @date 2019年4月22日上午8:12:38 * @version 1.0 */ // 模拟卖火车票 public class TicktetDemo { public static void main(String[] args) throws Interrupte...

龚道松 718

java多线程卖火车票_Java多线程小例子(三个窗口卖火车票)

class Ticket implements Runnable{private int TicketNum = 100; //100张火车票private boolean flag = true;private synchronized void sale(){if(TicketNum<=0){flag = false;return ;}TicketNum--;System.out.pri...

weixin_31319319的博客 559

Java 多线程同步-模拟窗口售票

编程模拟售票系统,模拟多个窗口(至少4个)同时出售100张车票的情况;用实现Runnable接口的方法实现多线程。 public class SellTicket implements Runnable{ private int ticket = 100; @Override public void run(){ sell(); } public void sell(){ while(true){ synchro

qq_44275015的博客 2814
上一篇: 【Java多线程手写代码】(一):启动两个线程交替顺序打印奇偶数
下一篇: 【Java多线程手写代码】(三):快手面试官让我手写代码实现三个线程按序输出1 2 3 4 5, 6 7 8 9 10, 11 12 13 14 15...
少侠露飞
博客等级 码龄9年 214粉丝 117原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值