方法一

加Lock同步锁实现,对多线程共享的数据加锁实现线程同步。
代码示例:
     //票数private int count = 100;//声明lock锁(是非公平锁)ReentrantLock lock = new ReentrantLock();public void a() {//获取锁lock.lock();try {if (count > 0) {//休息Thread.sleep(10);//票存在,卖票 ticket--System.out.println(Thread.currentThread().getName() + "-->正在卖第" + count + "张票");count--;}} catch (Exception e) {e.printStackTrace();} finally {//手动释放锁lock.unlock();}}

测试:

    @org.junit.Testpublic void b() {long start = System.currentTimeMillis();for (int i = 0; i < 500; i++) {new Thread(new Runnable() {@Overridepublic void run() {a();}}).start();}long end = System.currentTimeMillis();System.out.println(end-start);}

测试结果:

方法二

 加synchronized同步代码块关键字,实现线程的同步。

代码示例:

    public synchronized void c() {if (count > 0) {try {Thread.sleep(10);//票存在,卖票 ticket--System.out.println(Thread.currentThread().getName() + "-->正在卖第" + count + "张票");count--;} catch (InterruptedException e) {e.printStackTrace();}}}

测试:

   @org.junit.Testpublic void d(){for (int i = 0; i < 10; i++) {new Thread(new Runnable() {@Overridepublic void run() {c();}}).start();}}

测试结果:

总结

synchronized和Lock都可以解决多线程共享的数据的问题。两者都是共享锁。但是synchronized是不需要声明一个锁的,只需要将要同步的代码写在synchronized修饰即可,但是lock锁需要声明一个,并且需要在finally中手动释放同步锁。

多线程问题-买票问题相关推荐

  1. java 小程序 多线程_《多线程练习—买票小程序——Java第十四周》

    /* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved. * 文件名称:    < ...

  2. java多线程举例买票之买电影票出现的了相同的票和负数票的原因分析和解决方法

    package cn.itcast_03; /** 我们在前面讲解的电影院售票程序,从表面上看,没什么问题* 但是在,真实的生活中,售票时网络时不能实时传输* 会有延迟的* * 通过加入延迟,就产生了 ...

  3. java模拟多线程买票问题

    多线程买票是java中的一个经典案例,其主要思想无非包括2点,synchronized和锁,两者中,前者实现同步,后者为同步的线程提供锁,从而实现多个线程共享同一份资源时候,能够同步进行; 经典的方式 ...

  4. JAVA多线程作业-多人买票

    JAVA多线程作业 作业要求: 1. 假设现在有一个售票员进行售票,票价为5元,初始状态:票数不限,票售员手中有1张10元钱: 2. 每来一个顾客买票,相当于是创建一个线程,注意,此时顾客共享的资源是 ...

  5. java多线程买票实例

    3个窗口同时买票 * * 同步: * 1:同步代码块 * synchronized(锁对象(唯一)){ * * -需要被同步的代码 * * } * 2:同步方法 * 修饰符 synchronized ...

  6. java多线程学习二、安全与不安全示例:12306买票和银行取钱、java内存模型、内存可见性、线程同步块和方法

    文章目录 前言 1. 什么是块,分为几种 2. 静态块与构造块的区别 一. 举例说明:并发情况下,线程不安全 1. 示例1:unsafe12306取票 2. 示例2:unsafe银行取钱 二.线程不安 ...

  7. java 买票 多线程_java多线程买票问题

    自己写了一个多线程买票的实例,运行结果也对了,但是自己解释不了,谁能帮忙解释一下为什么结果会正确?import java.util.concurrent.ExecutorService; import ...

  8. 多线程(并发)买票的案例详解同步代码块和同步方法 (复习)

    文章目录 前言 简单的原理: 队列+锁 常见的买票案例(线程安全:多个线程操作同一个数据.) 结果: 使用同步代码块或者同步方法(解决线程不安全的问题) 添加的方式一:synchronized 关键字 ...

  9. Java之多线程买票程序

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

最新文章

  1. 【每日一算法】搜索插入位置
  2. 连续时间傅里叶变换(FT)
  3. [SUCTF2018]babyre [ACTF新生赛2020]fungame
  4. android删除文件夹代码,Android_Android递归方式删除某文件夹下的所有文件(.mp3文件等等),1.由于需要删除文件,因此需 - phpStudy...
  5. 世界上最奇异的10种树,你都见过吗?
  6. unity怎么制作云飘动_Unity 如何制作星空粒子效果?
  7. 【M1兼容】阿里云盘小白羊版 Mac版(支持满速)
  8. C#预处理器指令 用法
  9. HTML5 tel make a phone call
  10. 2017 Multi-University Training Contest - Team 1
  11. Java虚拟机(JVM)的类加载机制LLI
  12. 当元宇宙撞上赛博文化 | 成为「大创夜家」
  13. 用于图像分割的卷积神经网络:从R-CNN到Mask R-CNN
  14. 不允许一个用户使用一个以上用户名域一个服务器或共享
  15. 香港大学计算机视觉识别教授排名,北京师范大学香港浸会大学联合国际学院四位教师的课题喜获国家自然科学基金资助...
  16. curl ip.sb查询公网ip
  17. ubuntu 双屏显示的设置
  18. C++ 智能指针我得用用看
  19. 安卓手机如何把PDF文件转换为JPG图片
  20. Oracle 11g 中恢复管理器RMAN介绍

热门文章

  1. 数据仓库Kimball维度建模技术精华
  2. MODBUS-ASCII协议
  3. 某证券项目软件测试面试过程总结
  4. win10电脑只有飞行模式
  5. android 资源网址总结
  6. 基于Java工作流引擎,集团应用模式用户组功能设计与实现
  7. 电子工程师,你在深圳值多少钱
  8. 一图了解所有常见的接口形状:Type-C,雷电3,Mini DP, DP, HDMI, DVI......
  9. 好看的滤镜怎么调?来看看今日的分享
  10. 作为代理记账公司的销售,该如何与客户交流,才能赢得客户的好感?