一:引言

这里是加了个同步块,来保证数据的准确性,用了个容器使,我们可以选位置

二:上码(这里是模拟在电影院选位置)

package com.wyj.three;import java.util.ArrayList;
import java.util.List;public class Demo6_快乐影院2 {public static void main(String[] args) {// TODO Auto-generated method stub//电影院中可用的位置List<Integer> ticts = new ArrayList<>();ticts.add(1);ticts.add(2);ticts.add(3);ticts.add(4);ticts.add(5);ticts.add(6);//顾客需要的位置List<Integer> seats1 = new ArrayList<>();seats1.add(1);seats1.add(2);List<Integer> seats2 = new ArrayList<>();seats2.add(7);Cinema2 cinema = new Cinema2(ticts,"快乐影院!");new Thread(new Customer2(seats1, cinema),"大王").start();new Thread(new Customer2(seats2,cinema),"小王").start();}
}class Cinema2{private List<Integer> ticts;//票数private String name;//电影院名称public Cinema2(List<Integer> ticts, String name) {super();this.ticts = ticts;this.name = name;}//购票public boolean Moreticket(List<Integer> seats) {System.out.println("可用位置为:"+this.ticts);List<Integer> copy = new ArrayList<Integer>();//赋值,将ticte容器的内容复制到copy容器当中copy.addAll(ticts);//相减 这样可以减去copy容器包含seats容器中相同的元素copy.removeAll(seats);//这里表示 seats容器当中的元素,copy容器都包含if(ticts.size() - copy.size() != seats.size()) {return false;}ticts = copy;return true;}
}
//顾客  自己选位置
class Customer2 implements Runnable{private List<Integer> seats;private Cinema2 ca;public Customer2(List<Integer> seats, Cinema2 ca) {super();this.seats = seats;this.ca = ca;}@Overridepublic void run() {// TODO Auto-generated method stubsynchronized (ca) {boolean flag = ca.Moreticket(seats);if(flag) {System.out.println("出票成功:"+Thread.currentThread().getName()+"的位置-->"+this.seats);}else {System.out.println("出票失败"+Thread.currentThread().getName());}}}}


如有疑问请留言

java并发练习之快乐影院相关推荐

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

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

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

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

  3. java并发编程第一课 线程的创建、停止和状态变更

    开篇词: 由点及面,搭建你的 Java 并发知识网 你好,欢迎学习<Java 并发编程核心 78 讲>,我是讲师星星,一线互联网公司资深研发工程师,参与过集团内多个重点项目的设计与开发. ...

  4. Java改知能机_Java 面试突击之 Java 并发知识基础 进阶考点全解析

    版权说明:本文内容根据 github 开源项目整理所得 项目地址:https://github.com/Snailclimb/JavaGuide​github.com 一.基础 什么是线程和进程? 何 ...

  5. 构建Java并发模型框架

    2002 年 2 月 22 日 Java的多线程特性为构建高性能的应用提供了极大的方便,但是也带来了不少的麻烦.线程间同步.数据一致性等烦琐的问题需要细心的考虑,一不小心就会出现一些微妙的,难以调试的 ...

  6. Java并发面试,幸亏有点道行,不然又被忽悠了

    2019独角兽企业重金招聘Python工程师标准>>> 前言 面试Java,必然要被问Java内存模型和Java并发开发.我被问到的时候,心里慌得一批,"额,是在<T ...

  7. Java并发 -- JMM

    文章基于jdk1.7,通过学习<Java并发编程的艺术>,对Java内存模型的理解 并发编程模型的两个关键问题 线程之间如何通信 线程之间如何同步 上面所说的线程指的是并发执行的活动实体. ...

  8. java 并发统计_java并发编程|CountDownLatch计数器

    0x01,CountDownLatch介绍 CountDownLatch是一个计数器,作为java并发编程中三个组件之一,这个组件的使用频率还是很多的.这里分享下自己画的java并发编程组件的图,后面 ...

  9. Java并发编程71道面试题及答案

    Java并发编程71道面试题及答案 1.在java中守护线程和本地线程区别? java中的线程分为两种:守护线程(Daemon)和用户线程(User). 任何线程都可以设置为守护线程和用户线程,通过方 ...

最新文章

  1. 【 MATLAB 】信号处理工具箱之波形产生函数 pulstran
  2. 单片机小白学步系列(七) 准备实验板——萝卜青菜,各有所爱
  3. android 的监控讲解,java android网络监测详解
  4. python下载matplotlib.finance模块_关于Matplotlib中No module named 'matplotlib.finance'的解决办法...
  5. 【POJ - 3321】 Apple Tree(dfs序 + 线段树维护 或 dfs序 + 树状数组维护)
  6. 中国家禽细菌学诊断行业市场供需与战略研究报告
  7. Oracle中的COALESCE,NVL,NVL2,NULLIF函数
  8. java t输出_java --输入输出
  9. Windows XP DOS命令大全
  10. 小程序分享H5链接地址异常
  11. 构建CF卡Linux系统的几个常见难题
  12. 外贸找客户软件:Top Lead Extractor
  13. matlab编程螺旋oam,一种多模态OAM涡旋电磁波微带阵列天线制造技术
  14. 这一周 火火火 的 GitHub 项目
  15. python数字1 3怎么表示_python数字1-3
  16. Spark中repartition和coalesce的用法
  17. type:ETL_QUALITY_UNSATISFIED; msg:quality not good enough to cancel
  18. EDI会给中小型企业带来哪些帮助?
  19. 从阿里云邮箱迁移至网易邮箱
  20. 华硕天选二FA506QM BIOS更新至311无法读取固态硬盘

热门文章

  1. Linux中写脚本,同时去开启我们自己设定的多个服务(含定时脚本实现)
  2. 用dataGridView实现增删改查
  3. Android之提示can‘t execute: Permission denied解决办法
  4. Android插件化开发之动态加载技术简单易懂的介绍方式
  5. Android之在ubuntu过滤日志以及ps总结
  6. Android之AIDL使用详解
  7. java简易日历程序报告_简单的日历小程序(java编写)
  8. attiny13a程序实例_ATtiny13A图文构成
  9. python程序 爱意_[Python]快学学怎么Python爬一段情书送女朋友吧
  10. 80岁COBOL码农:扶我起来,这个bug我会修!