Thread买票这个案例问题分析

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

                  今天,写了一个写了一个买票的案例,测试多线程访问的问题,结果打印总是某一个线程,其他线程都不能进来,下面贴下代码



                  一。错误代码

                        

                           打印结果如下

                                            


                       可以看到都是同一个进程打印的值,为何会这样能?,想了很久,解释下,其实问题是清楚的,但是解决问题思路出现了问题,现在解释下问题


                       二,问题分析

                              



                     三,解决思路

                           只要让进程不要一直占据循环就行了,换句话说,就是,将锁加在循环内,这样每个进程都有机会进入到循环中,于是代码如下


                     

                   四,正确代码

                                

                        注意,改变了锁加的位置,这样,每个进程都能进入到循环中,这样就能,每个进程都能执行买票的代码了。

java模拟多线程买票问题 多线程买票java中的一个经典案例,其主要思想无非包括2点,synchronized和锁,两者中,前者实现同步,后者为同步的线程提供锁,从而实现多个线程共享同一份资源时候,能够同步进行; 经典的方式是synchronized + 锁对象,同样采用诸如Lock即显式的声明concurrent中的锁也可以实现同样的效果,可根据实际情况酌情使用,以下分别采用不同的方式实现模拟多窗口买票场景 方式1... 阅读详情

相关推荐

07-01 三个售票窗口同时出售20张票(并发)

07-01 三个售票窗口同时出售20张票(并发)07-01 三个售票窗口同时出售20张票(并发)

第十七节 多线程(二)购票经典案例+单例设计模式

池化技术的思想”主要是为了减少每次获取资源的消耗,提高对资源的利用率。其目的是限制和管理资源,如:使用线程池可以进行统一的分配,调优和监控。降低资源消耗。提高相应速度。提高线程的可管理性。...

云深不知处 3460

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

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

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

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

weixin_46081857的博客 1万+

多线程买票案例

测试类 package thead; public class testThread { public static void main(String [] arg){ Tickets ticket = new Tickets(); Thread t1 = new Thread(ticket,"窗口一:"); ...

java_xxxx的博客 4104

多线程(线程同步机制案例)——购买车票经典案例

在写程序之前,我们要考虑一个问题多线程并发购买车票会不会出现问题? 一号站台售票时,还没售出,二号站台把这张票售出,此时,票数是少一张还是少两张? 当一个共享资源被多个线程使用时,很有可能会出现线程安全的问题。 比如在银行取款的时候,一个账户一万元存款,一对夫妻同时取钱,在多线程并发的情况下,出现网络延迟或者别的情况,他们会不会同时取出一万元? 购买车票的时候,车票就是一个共享资源,这个共享资源很可能会被两个线程同时使用,就会造成两个人一张票的情况 此时我们要对这个共享资源进行保护,使用...

weixin_50641683的博客 866

线程同步————多窗口买票

多窗口买票,synchronized内置锁,线程同步

weixin_57281267的博客 244

Juc01_多线程概述、四种实现方式、常用方法API、生命周期、买票案例、synchronized锁

本章主要讲解:多线程概述、四种实现方式、常用方法API、生命周期、买票案例、synchronized锁,如有问题可以评论区共同讨论,共勉!

m0_74969835的博客 1026

多线程java.Thread

狂神说java多线程笔记整理。

m0_49913277的博客 427

Java多线程

Java多线程初步

qq_52772066的博客 803

B站【狂神说Java笔记】-多线程

synchronized 方法 控制对 “ 对象”的访问,每个对象对应一把锁,每个synchronized 方法都必须获得调用该方法的对象的锁才能执行,否则线程会阻塞,方法一旦执行,就独占该锁,直到该方法返回才释放锁,后面被阻塞的线程才能获得这个锁,继续执行。处理多线程问题时,多个线程访问同一个对象(并发),并且某些线程还想修改这个对象,这个时候我们就需要线程同步,线程同步就是一种机制,多个需要同时访问此对象的线程进入这个对象的等待池形成队列,等待前面线程使用完毕,下一个线程再使用。

2401_86402522的博客 860

2020-11-17

多线程 学前总结 进程与线程的区别 在这里插入图片描述 多线程的方法执行顺序 在这里插入图片描述 多线程核心知识点 在这里插入图片描述 实现多线程 创建线程有3种方法,分别是继承Thread类,实现Runnable接口和实现Callable接口。 在这里插入图片描述 继承Thread类 在这里插入图片描述 // 继承父类实现多线程 public class TestThread extends Thread { @Override public void run() { for (int i = 0

madrouge的博客 131

Java多线程基础

1. 多线程与普通方法的区别 2. 线程调用的三种方法 2.1 继承Thread类 package com.liu.demo1; //创建线程方式1:继承Thread类,重写run()方法,调用start开启线程 //总结:注意,线程开启不一定立即执行,由CPU调度 public class TestThread1 extends Thread{ @Override //Alt+Inster快捷重写 public void run() { //run方法线程

weixin_47697162的博客 360

Thread和Runnable实现线程同步买票

嗯嗯嗯,记录一下自己最近自己又研究了一下关于Thread和Runnable实现线程同步买票 1,实现Runnable接口,重写里面run()方法,比较推荐的一种方式 避免了单继承局限性 增强程序的扩展性,将设置程序线程任务和开启新线程进行了分离 ### 使用同步代码块方式 public class RunnableSale implements Runnable { private i...

弓长弓长要努力啊 475

JAVA线程经典案例 多线程买票 详细解析

很经典的多线程题目,根据自己的理解得出的解析过程和结论,有不对的地方希望指出。 需求: 建立购票系统,分别让多个窗口(多线程)同时去卖票 创建个Runnable接口的实现类 重写其中的run()方法,变成购票方法 创建多个接口类对象(即多个窗口)放入线程中多个执行 package Chating; public class Maipiao { public static void main(String[] args) { per per = new per();//创建线程实现.

ajun4的博客 5449

java多线程使用详解与案例,超详细

java多线程使用 java使用多线程的三种方式: 继承Thread类,并重写run方法。 实现Runnable接口,重写run方法 实现Callable<返回值>接口,重写call方法 实例如下 继承Thread class test extends Thread{ @Override public void run() { System.out.println("你好啊"); } } 开始启动线程: new test().start() 实现R

languageStudent的博客 3万+

Java多线程买票程序

Java多线程买票程序 1、要求 要求五个线程,分别命名为售票窗口1、售票窗口 2.......售票窗口5, 一共100张票,每个售票窗口卖票的数量大致相同(20)张卖票时给与编号,每张票唯一。 每次出票时,输出时间、售票时间名字和票的编号正确。 每个售票窗口卖票大致相同。 ...

星辰大数据的博客 1604

测试 synchronized 的买票案例

测试 synchronized 的买票案例

weixin_46376562的博客 278
上一篇: Java Thread 总结
下一篇: 关于Thread可能的面试题
K_122
博客等级 码龄11年 11粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值