java并发练习之快乐影院
一:引言
这里是加了个同步块,来保证数据的准确性,用了个容器使,我们可以选位置
二:上码(这里是模拟在电影院选位置)
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并发练习之快乐影院相关推荐
- java的知识点32——多线程 并发同步的 性能分析、快乐影院 订票操作
多线程 并发 同步 性能分析 /*** 线程安全: 在并发时保证数据的正确性.效率尽可能高* synchronized* 1.同步方法* 2.同步块* @author Administrator ...
- 【Java多线程】并发时的线程安全:快乐影院示例
快乐影院示例 如果去掉71行的synchronized,会导致线程不安全 结果就是:明明已经没有票(有人抢先一步),却又被成功订走了.图见文末 下面是正确的代码: package cn.hanquan ...
- java并发编程第一课 线程的创建、停止和状态变更
开篇词: 由点及面,搭建你的 Java 并发知识网 你好,欢迎学习<Java 并发编程核心 78 讲>,我是讲师星星,一线互联网公司资深研发工程师,参与过集团内多个重点项目的设计与开发. ...
- Java改知能机_Java 面试突击之 Java 并发知识基础 进阶考点全解析
版权说明:本文内容根据 github 开源项目整理所得 项目地址:https://github.com/Snailclimb/JavaGuidegithub.com 一.基础 什么是线程和进程? 何 ...
- 构建Java并发模型框架
2002 年 2 月 22 日 Java的多线程特性为构建高性能的应用提供了极大的方便,但是也带来了不少的麻烦.线程间同步.数据一致性等烦琐的问题需要细心的考虑,一不小心就会出现一些微妙的,难以调试的 ...
- Java并发面试,幸亏有点道行,不然又被忽悠了
2019独角兽企业重金招聘Python工程师标准>>> 前言 面试Java,必然要被问Java内存模型和Java并发开发.我被问到的时候,心里慌得一批,"额,是在<T ...
- Java并发 -- JMM
文章基于jdk1.7,通过学习<Java并发编程的艺术>,对Java内存模型的理解 并发编程模型的两个关键问题 线程之间如何通信 线程之间如何同步 上面所说的线程指的是并发执行的活动实体. ...
- java 并发统计_java并发编程|CountDownLatch计数器
0x01,CountDownLatch介绍 CountDownLatch是一个计数器,作为java并发编程中三个组件之一,这个组件的使用频率还是很多的.这里分享下自己画的java并发编程组件的图,后面 ...
- Java并发编程71道面试题及答案
Java并发编程71道面试题及答案 1.在java中守护线程和本地线程区别? java中的线程分为两种:守护线程(Daemon)和用户线程(User). 任何线程都可以设置为守护线程和用户线程,通过方 ...
最新文章
- 【 MATLAB 】信号处理工具箱之波形产生函数 pulstran
- 单片机小白学步系列(七) 准备实验板——萝卜青菜,各有所爱
- android 的监控讲解,java android网络监测详解
- python下载matplotlib.finance模块_关于Matplotlib中No module named 'matplotlib.finance'的解决办法...
- 【POJ - 3321】 Apple Tree(dfs序 + 线段树维护 或 dfs序 + 树状数组维护)
- 中国家禽细菌学诊断行业市场供需与战略研究报告
- Oracle中的COALESCE,NVL,NVL2,NULLIF函数
- java t输出_java --输入输出
- Windows XP DOS命令大全
- 小程序分享H5链接地址异常
- 构建CF卡Linux系统的几个常见难题
- 外贸找客户软件:Top Lead Extractor
- matlab编程螺旋oam,一种多模态OAM涡旋电磁波微带阵列天线制造技术
- 这一周 火火火 的 GitHub 项目
- python数字1 3怎么表示_python数字1-3
- Spark中repartition和coalesce的用法
- type:ETL_QUALITY_UNSATISFIED; msg:quality not good enough to cancel
- EDI会给中小型企业带来哪些帮助?
- 从阿里云邮箱迁移至网易邮箱
- 华硕天选二FA506QM BIOS更新至311无法读取固态硬盘
热门文章
- Linux中写脚本,同时去开启我们自己设定的多个服务(含定时脚本实现)
- 用dataGridView实现增删改查
- Android之提示can‘t execute: Permission denied解决办法
- Android插件化开发之动态加载技术简单易懂的介绍方式
- Android之在ubuntu过滤日志以及ps总结
- Android之AIDL使用详解
- java简易日历程序报告_简单的日历小程序(java编写)
- attiny13a程序实例_ATtiny13A图文构成
- python程序 爱意_[Python]快学学怎么Python爬一段情书送女朋友吧
- 80岁COBOL码农:扶我起来,这个bug我会修!