synchronized是同步锁,当有一个线程访问上锁的代码块时,另一个线程无法访问代码块

/*** @author: Ren* @date: 2020-08-02  16:40* @description:*/
public class SellTickerSys {private  int ticketleft = 10;private int ticketCount = ticketleft;private Object lock = new Object();public static void main(String[] args) {//        创建对象实例SellTickerSys sellTickerSys = new SellTickerSys();
//        创建售票窗口Seller seller = sellTickerSys.new Seller();Seller seller1 = sellTickerSys.new Seller();Seller seller2 = sellTickerSys.new Seller();new Thread(seller , "售票点一").start();new Thread(seller1 , "售票点二").start();new Thread(seller2 , "售票点三").start();}class Seller implements  Runnable{@Overridepublic void run() {while (true) {synchronized (lock) {if (ticketleft > 0) {System.out.println(Thread.currentThread().getName() + "售出第" + (ticketCount + 1 - ticketleft) + "张车票");ticketleft--;try {//                            模拟售票工作Thread.sleep(200);} catch (InterruptedException e) {e.printStackTrace();}}else{System.out.println("车票全部售完!");System.exit(0);
//                        正常离开程序}}}}}
}

运行结果如下,大部分的票是售票口一售出

所以进行了小小的改良
/**

  • @author: Ren

  • @date: 2020-08-02 16:40

  • @description:
    */
    public class SellTickerSys {
    private int ticketleft = 10;
    private int ticketCount = ticketleft;
    private Object lock = new Object();

    public static void main(String[] args) {
    // 创建对象实例
    SellTickerSys sellTickerSys = new SellTickerSys();
    // 创建售票窗口
    Seller seller = sellTickerSys.new Seller();
    Seller seller1 = sellTickerSys.new Seller();
    Seller seller2 = sellTickerSys.new Seller();
    new Thread(seller , “售票点一”).start();
    new Thread(seller1 , “售票点二”).start();
    new Thread(seller2 , “售票点三”).start();

    }
    class Seller implements Runnable{
    @Override
    public void run() {
    while (true) {
    synchronized (lock) {
    if (ticketleft > 0) {
    System.out.println(Thread.currentThread().getName() + “售出第” + (ticketCount + 1 - ticketleft) + “张车票”);
    ticketleft–;
    }else{
    System.out.println(“车票全部售完!”);
    System.exit(0);
    // 正常离开程序
    }
    try {
    // 模拟售票工作
    Thread.sleep(200);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }
    }
    }
    }
    }
    第二次·虽然解决了一直使用线程1的错误,但是也造成了逻辑上的错误,将模拟售票工作的主动睡眠挪到了外面,所以在思考后引进了线程池的技术解决这个问题,https://blog.csdn.net/weixin_44281922/article/details/107769068

火车售票系统以及改良版相关推荐

  1. c语言 feof_C语言 实现简单功能的12306火车售票系统【附源码】

    本文福利在文末! 学习迷茫遇到问题了吗?现在关注微信公众号:C程序编程 免费获取进阶指导,资料工具以及源码 程序设计要求用C语言写一个简单的火车售票系统,主要实现的功能为: 录入班次信息 浏览班次信息 ...

  2. 火车售票系统 java_基于jsp的火车售票系统-JavaEE实现火车售票系统 - java项目源码...

    基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的火车售票系统, 该项目可用各类java课程设计大作业中, 火车售票系统的系统架构分为前后台两部分, 最终实现在线上 ...

  3. 火车票售票系统C语言大作业,基于C语言实现简单的12306火车售票系统

    程序设计要求用C语言写一个简单的火车售票系统,主要实现的功能为: 录入班次信息 浏览班次信息 按班次号查询 按终点站查询 按余票数量排序保存 售票 退票 更新班次信息 退出系统 所有的班次信息保存在n ...

  4. JAVA_SSM火车售票系统订票(含论文)毕业设计【演示视频】

    演示视频 JAVA 源码下载地址 JAVA_SSM火车售票系统订票(含论文)毕业设计,行业软件|毕业设计,Asp.net源码|- 51Aspx.com一.源码描述本系统基于SSM(Spring+Spr ...

  5. PHP火车购票系统,PHPC6051 火车售票系统

    文件名大小更新时间 PHPC6051 火车售票系统02017-11-02 PHPC6051 火车售票系统\.DS_Store61482017-11-02 __MACOSX02018-03-15 __M ...

  6. 火车售票系统(基于UML的软件分析与设计模型建模实验)

    火车售票系统(基于UML的软件分析与设计模型建模试验) 文章目录 火车售票系统(基于UML的软件分析与设计模型建模试验) 一.需求 二.UML用例图 三.UML类图 四.UML时序图 一.需求 实现一 ...

  7. pthread售票多窗口共同C语言,基于C语言实现简单的12306火车售票系统

    程序设计要求用C语言写一个简单的火车售票系统,主要实现的功能为: 录入班次信息 浏览班次信息 按班次号查询 按终点站查询 按余票数量排序保存 售票 退票 更新班次信息 退出系统 所有的班次信息保存在n ...

  8. 火车售票系统(纯C语言)

    这是好久之前写的一个火车售票系统, 写的非常粗糙, 后来也没改了, 希望遇见有缘人继续优化吧. 主要的功能是:设置车次,删除车次, 买票, 改签, 退票, 查询等. #include<stdio ...

  9. 火车售票系统c语言编程,基于C语言实现简单的12306火车售票系统.pdf

    基基于于C语语言言实实现现简简单单的的12306火火车车售售票票系系统统 程序设计要求用C语言写一个简单的火车售票系统,主要实现的功能为: 入班次信息 浏览班次信息 按班次号查询 按终点站查询 按余票 ...

最新文章

  1. C++_vptr与vtbl,虚函数与虚表
  2. python+opencv图像拼接-python opencv 图像拼接的实现方法
  3. c语言strcat_s用于调用的参数太少_为什么系统调用会消耗较多资源呢
  4. linux 多线程编程笔记
  5. Visual Studio 快捷键汇总
  6. 上海民警这个方法让汽车提前“助跑”,路口通行效率提10%
  7. python RSA加密、解密、签名
  8. c语言牛顿方法,C语言编写牛顿迭代法的跟踪
  9. linux配置ssh免密钥登录
  10. oneday2mybatis下载
  11. 我是如何自学成为程序员的
  12. FNLP(FudanNLP)的安装及在eclipse中的使用
  13. opencv第九天pro
  14. 精美素材:10套最新出炉的免费扁平图标下载
  15. 小学计算机课教师教学笔记,小学信息技术教师读书笔记
  16. python跑一千万次循环要多久_进行一亿次MD5需要耗时多久?
  17. 内存管理pbuf.h头文件源码解析——LwIP学习
  18. 计算机兴趣班学什么好处,电脑兴趣班教学工作计划
  19. 百度商业系统大规模微服务分布式监控实践
  20. [Python从零到壹] 五十五.图像增强及运算篇之图像平滑(均值滤波、方框滤波、高斯滤波)

热门文章

  1. C++常用函数--count函数
  2. 基于ssm+vue火车订票管理系统
  3. 怎么在打开查看的CAD图纸上插入OLE对象?
  4. 关于后台管理linkbutton按钮几个重要属性的理解
  5. 《当程序员的那些狗日日子》(二十九)人来人往
  6. 算法解剖 - 数据结构篇 - 栈
  7. 计算机网络术语大全 翻译,计算机网络词汇中文英语翻译对照术语
  8. FZU - 2243 - Daxia like uber (单源最短路)
  9. css3实现扁平化风格APP应用图标时钟动画
  10. 【PAT】1091 Acute Stroke (30 分)