同步块版

import java.util.ArrayList;
import java.util.List;/*** 快乐影院* @author gudaochangsheng**/
public class HappyCinema2 {public static void main(String[] args) {// TODO Auto-generated method stub//可用位置List<Integer> available = new ArrayList<Integer>();available.add(1);available.add(2);available.add(3);available.add(4);available.add(5);available.add(6);available.add(7);//顾客需要位置List<Integer> seats1 = new ArrayList<Integer>();seats1.add(1);seats1.add(2);List<Integer> seats2 = new ArrayList<Integer>();seats2.add(4);seats2.add(5);seats2.add(6);GdcsCinema c = new GdcsCinema(available, "happy gdcs");new Thread(new HappyCustomer(c, seats1),"a").start();new Thread(new HappyCustomer(c, seats2),"b").start();}}
class HappyCustomer implements Runnable
{GdcsCinema cinema;List<Integer> seats;public HappyCustomer(GdcsCinema cinema, List<Integer>seats) {this.cinema = cinema;this.seats = seats;}@Overridepublic void run() {// TODO Auto-generated method stubsynchronized (cinema) {boolean flag = cinema.bookTickets(seats);if(flag){System.out.println("出票成功"+Thread.currentThread().getName()+"-<位置为:"+seats);}else{System.out.println("出票失败"+Thread.currentThread().getName()+"-<位置不够:");}}}}
class GdcsCinema{List<Integer> available;//可用的位置String name;//名称public GdcsCinema(List<Integer> available, String name) {this.available = available;this.name = name;}public boolean bookTickets(List<Integer> seats){System.out.println("可用位置为:"+available);List<Integer> copy = new ArrayList<Integer>();copy.addAll(available);//相减copy.removeAll(seats);//判断大小if(available.size()-copy.size()!=seats.size()){return false;}//成功available = copy;return true;}
}

运行效果:

同步方法版

/** * @author 作者 gudaochangsheng* @version 创建时间:2019年10月4日 下午8:25:14 * 类说明 */public class Happy12306 {public static void main(String[] args) {// TODO Auto-generated method stubWeb12306 c = new Web12306(8, "happy gdcs");new Passenger(c, "a", 2).start();new Passenger(c, "b", 1).start();}}class Passenger extends Thread
{int seats;public Passenger(Runnable target,String name,int seats) {super(target,name);this.seats = seats;}
}
class Web12306 implements Runnable{int available;//可用的位置String name;//名称public Web12306(int available, String name) {this.available = available;this.name = name;}public void run() {Passenger p = (Passenger)Thread.currentThread();boolean flag = this.bookTickets(p.seats);if(flag){System.out.println("出票成功"+Thread.currentThread().getName()+"-<位置为:"+p.seats);}else{System.out.println("出票失败"+Thread.currentThread().getName()+"-<位置不够:");}}public synchronized boolean bookTickets(int seats){System.out.println("可用位置为:"+available);if(seats>available){return false;}available-=seats;return true;}
}

运行效果:

【java】多线程_并发_同步_快乐影院相关推荐

  1. JAVA Java多线程与并发库

    Java多线程与并发库 同步方式 import javax.xml.stream.events.StartDocument;public class TestSynchronized {public ...

  2. Java多线程与并发库高级应用--18_传智播客_张孝祥_java5阻塞队列的应用

    Java多线程与并发库高级应用--18_传智播客_张孝祥_java5阻塞队列的应用 原创:徐工 2018-5- 5 17.10 package cn.itcast.heima2; import jav ...

  3. java多线程与并发_漫画 | Java多线程与并发(一)

    1.什么是线程? 2.线程和进程有什么区别? 3.如何在Java中实现线程? 4.Java关键字volatile与synchronized作用与区别? volatile修饰的变量不保留拷贝,直接访问主 ...

  4. java书籍_还搞不定Java多线程和并发编程面试题?你可能需要这一份书单!

    点击蓝色"程序员书单"关注我哟 加个"星标",每天带你读好书! ​ 在介绍本书单之前,我想先问一下各位读者,你们之前对于Java并发编程的了解有多少呢.经过了1 ...

  5. JAVA多线程和并发面试问题

    转载自   JAVA多线程和并发面试问题 Java多线程面试问题 1.进程和线程之间有什么不同? 一个进程是一个独立(self contained)的运行环境,它可以被看作一个程序或者一个应用.而线程 ...

  6. JAVA多线程和并发基础面试问答(转载)

    JAVA多线程和并发基础面试问答 原文链接:http://ifeve.com/java-multi-threading-concurrency-interview-questions-with-ans ...

  7. Java多线程与并发系列从0到1全部合集,强烈建议收藏!

    在过去的时间中,我写过Java多线程与并发的整个系列. 为了方便大家的阅读,也为了让知识更系统化,这里我单独把Java多线程与并发的整个系列一并罗列于此,希望对有用的人有用,也希望能帮助到更多的人. ...

  8. java多线程与并发原理

    三.java多线程与并发原理 1.进程和线程的区别: 进程和线程的由来: (1)串行:初期的计算机只能串行执行任务,并且需要长时间等待用户输入: (2)批处理:预先将用户的指令集集中成清单,批量串行处 ...

  9. Java多线程与并发相关 — 原理

    Java多线程与并发相关 - 原理 一 synchronized同步 1. 线程安全问题的主要诱因? 存在共享资源(也称临界资源); 存在多条线程共同操作这些共享数据; 2. 解决办法. 同一时刻有且 ...

  10. Java 多线程与并发编程专题

    Java 线程基础 Java 多线程开发 线程安全与同步 并发控制 非阻塞套接字(NIO) Java 5 中的并发 JDK 7 中的 Fork/Join 模式 相关书评 Java 平台提供了一套广泛而 ...

最新文章

  1. 爱上MVC~ajax调用分部视图session超时页面跳转问题
  2. python按行求和_Python第一篇:对3个Excel文件进行整合
  3. 【bfs】WJ的逃离
  4. mysql sum_MySQL中的SUM函数使用教程
  5. 【论文写作】网上选课系统中数据库设计模块如何写
  6. 分布式事务处理学习报告
  7. 人工智能——前言概述
  8. 点菜系统软件源码(点菜软件源码分享)
  9. cvtColor +内存泄漏
  10. KDJ算法详解,比百度百科要详细
  11. 命令行查看基金实时涨跌(附完整代码)
  12. layui laydate设置最小时间为当前时间
  13. 2024 递归Eason
  14. 【问题记录】02 Linux服务器安装MySql数据库报错:Failing package is: mysql-community-server GPG Keys are configured as
  15. 30天自制操作系统:第五天 结构体、文字显示与 GDT/IDT初始化
  16. 9343拆机 xps13_《拆机Pa》十二期 第二代XPS 13是进步还是退步
  17. word表格分开快捷键_word文档如何快速拆分表格,干货!怎样快速拆分表格以及快速合并表格技巧介绍...
  18. vue cli3源码解析
  19. 【狮子数学】chapter3-08-积分证明问题(第67——68)
  20. 初尝ACM,感觉?挺美妙。

热门文章

  1. 自己做量化交易软件(32)小白量化实战6--仿通达信公式选股
  2. jdk6版本下载地址
  3. rapidxml学习记录
  4. 数据结构1800题-错题集-第六章
  5. CompoundButton(checkbox,switch,ToggleButton)和RadioGroup OnCheckedChangeListener() 引用冲突问题
  6. VC2005字符集设置容易出错的问题!
  7. Fastboot驱动及安装
  8. BIGWORLD问题集
  9. Ext.grid.EditorGridPanel使用方法
  10. Cisco2811做端口映射