import java.util.ArrayList;
import java.util.List;public class HappyCinema {public static void main(String[] args) {//可用位置List<Integer> avilable = new ArrayList<Integer>();for (int i = 1; i <= 5; i++) {avilable.add(i);}//顾客1选的座位List<Integer> seat = new ArrayList<>();seat.add(1);seat.add(3);seat.add(5);//顾客2选的座位List<Integer> seat1 = new ArrayList<>();seat1.add(4);seat1.add(2);seat1.add(3);//电影院Cinema cinema = new Cinema(avilable, "快乐影院");Thread t1 = new Thread(new Customer(seat, cinema), "老高");Thread t2 = new Thread(new Customer(seat1, cinema), "老王");t1.start();t2.start();}
}class Customer implements Runnable{private List<Integer> seat;//选的座位private Cinema cinema;//选的电影院Customer(List<Integer> seat, Cinema cinema) {this.seat = seat;this.cinema = cinema;}@Overridepublic void run() {//同步代码块,锁定的是cinemasynchronized(cinema){boolean flag =cinema.bookTicket(seat);if(flag == false){System.out.println("出票失败");}else{System.out.println("出票成功");}}}
}class Cinema{private List<Integer> avilable; //显示可用的位置private String name;//电影院名称Cinema(List<Integer> avilable, String name) {this.avilable = avilable;this.name = name;}//购票public boolean bookTicket(List<Integer> seat){System.out.println("当前可用的位置为:" + this.avilable + Thread.currentThread().getName()+ "要取走位置 --->" + seat  );List<Integer> copy = new ArrayList<Integer>();copy.addAll(avilable);copy.removeAll(seat);if(avilable.size()-copy.size() != seat.size())return false;//如果成功,则赋值avilable = copy;return true;}
}

运行结果:

当前可用的位置为:[1, 2, 3, 4, 5]老高要取走位置 --->[1, 3, 5]
出票成功
当前可用的位置为:[2, 4]老王要取走位置 --->[4, 2, 3]
出票失败

线程---同步---快乐影院小案例相关推荐

  1. java的知识点32——多线程 并发同步的 性能分析、快乐影院  订票操作

    多线程  并发  同步  性能分析 /*** 线程安全: 在并发时保证数据的正确性.效率尽可能高* synchronized* 1.同步方法* 2.同步块* @author Administrator ...

  2. Java线程同步学习,线程不安全案例讲解,同步方法和同步块 synchronized

    本文主要是自己学习多线程时,所做的笔记,参考的是b站狂神说Java多线程视频讲解. 目录如下: 文章目录 线程同步 一.三大线程不安全案例 1.买票案例 2.不安全取钱 3.线程不安全 二.同步方法及 ...

  3. 【Java多线程】并发时的线程安全:快乐影院示例

    快乐影院示例 如果去掉71行的synchronized,会导致线程不安全 结果就是:明明已经没有票(有人抢先一步),却又被成功订走了.图见文末 下面是正确的代码: package cn.hanquan ...

  4. java同步锁售票_线程同步锁之火车站售票案例

    前言: 谈到多线程,就不得不说线程同步,那么什么是线程同步? 线程同步 即当有一个线程在对内存进行操作时,其他线程都不可以对这个内存地址进行操作,直到该线程完成操作, 其他线程才能对该内存地址进行操作 ...

  5. 经典案例:卖票问题【线程同步】

    一.案例需求 某个电影院上映了史诗级大片<回村的诱惑>,共有100张票,卖票窗口总共有三个.请设计一个程序模拟卖票的过程! 二.步骤分析 1.定义一个卖票的线程类实现Runnable接口, ...

  6. 线程同步类实现【国际化翻译案例+机场安检案例】

    精选30+云产品,助力企业轻松上云!>>> 一.线程同步类属于JUC的线程同步类,这些类使得线程之间的协调更加容易,支持了丰富的线程协调场景.逐步淘汰了Object的wait()和n ...

  7. java中用关键字为共享资源加锁_利用synchronized实现线程同步的案例讲解

    一.前期基础知识储备 (1)线程同步的定义:多线程之间的同步. (2)多线程同步原因:一个多线程的程序如果是通过Runnable接口实现的,则意味着类中的属性将被多个线程共享,由此引出资源的同步问题, ...

  8. java多线程:线程同步synchronized(不同步的问题、队列与锁),死锁的产生和解决

    0.不同步的问题 并发的线程不安全问题: 多个线程同时操作同一个对象,如果控制不好,就会产生问题,叫做线程不安全. 我们来看三个比较经典的案例来说明线程不安全的问题. 0.1 订票问题 例如前面说过的 ...

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

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

  10. 关于java线程同步的笔记_线程同步(JAVA笔记-线程基础篇)

    在多线程应用程序中经常会遇到线程同步的问题.比如:两个线程A.线程B可能会 "同时" 执行同一段代码,或修改同一个变量.而很多时候我们是不希望这样的. 这时候,就需要用到线程同步. ...

最新文章

  1. 远程Gitlab新建的分支在IDEA里不显示
  2. Xamarin.Android 使用 SQLite 出现 Index -1 requested, with a size of 10 异常
  3. 添加sudo权限脚本
  4. java NIO概述
  5. python 邮件报警
  6. angular——更多按钮的上拉菜单(路由跳转)
  7. fiddler chrome_fiddler抓包教程
  8. rsync 全网备份
  9. 摘要抽取算法——最大边界相关算法MMR(Maximal Marginal Relevance)
  10. 信息安全行业含金量较高的2个认证(建议都看一下)
  11. Markdown 简历模版, typroa 一键简历生成
  12. R 语言图形函数 par()参数应用举例
  13. Python数据分析-绘图-2-Seaborn进阶绘图-7-网格图
  14. Kali-linux-2020 sqli-labs环境配置(含网上最全Less-29在Kali上的配置)
  15. 青春散场,挚爱郭敬明(一草著)【连载二】
  16. GreenPlum 大数据平台--segment 失效问题恢复
  17. DC report_timing 报告分析(STA)
  18. 穹顶之下,我们该何去何从?
  19. 微信 小程序 web前端的春天 or 噩梦
  20. 【BlackDuck】Black-Duck-User-Guide用户指导书

热门文章

  1. 通过matlab实现正交表
  2. http转socks软件SOCKS2HTTP的使用
  3. 面向对象程序设计概念
  4. 禁用惠普服务器自动开机,惠普商用台式机如何在BIOS中设置通电自动开机
  5. vue整合ueditor
  6. 163企业邮箱 端口服务器,163企业邮箱端口
  7. GHOST XP SP2 遐想网络 纯净驱动版 3.1
  8. Warez出品的精品动画,近25万倍的压缩,大小仅有64K的
  9. 华为数通HCIA——网络架构
  10. c语言编程 碰撞的小球,小球碰撞游戏程序代码,求注释,越详细越好》》》