【java】多线程_并发_同步_快乐影院
同步块版
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】多线程_并发_同步_快乐影院相关推荐
- JAVA Java多线程与并发库
Java多线程与并发库 同步方式 import javax.xml.stream.events.StartDocument;public class TestSynchronized {public ...
- Java多线程与并发库高级应用--18_传智播客_张孝祥_java5阻塞队列的应用
Java多线程与并发库高级应用--18_传智播客_张孝祥_java5阻塞队列的应用 原创:徐工 2018-5- 5 17.10 package cn.itcast.heima2; import jav ...
- java多线程与并发_漫画 | Java多线程与并发(一)
1.什么是线程? 2.线程和进程有什么区别? 3.如何在Java中实现线程? 4.Java关键字volatile与synchronized作用与区别? volatile修饰的变量不保留拷贝,直接访问主 ...
- java书籍_还搞不定Java多线程和并发编程面试题?你可能需要这一份书单!
点击蓝色"程序员书单"关注我哟 加个"星标",每天带你读好书! 在介绍本书单之前,我想先问一下各位读者,你们之前对于Java并发编程的了解有多少呢.经过了1 ...
- JAVA多线程和并发面试问题
转载自 JAVA多线程和并发面试问题 Java多线程面试问题 1.进程和线程之间有什么不同? 一个进程是一个独立(self contained)的运行环境,它可以被看作一个程序或者一个应用.而线程 ...
- JAVA多线程和并发基础面试问答(转载)
JAVA多线程和并发基础面试问答 原文链接:http://ifeve.com/java-multi-threading-concurrency-interview-questions-with-ans ...
- Java多线程与并发系列从0到1全部合集,强烈建议收藏!
在过去的时间中,我写过Java多线程与并发的整个系列. 为了方便大家的阅读,也为了让知识更系统化,这里我单独把Java多线程与并发的整个系列一并罗列于此,希望对有用的人有用,也希望能帮助到更多的人. ...
- java多线程与并发原理
三.java多线程与并发原理 1.进程和线程的区别: 进程和线程的由来: (1)串行:初期的计算机只能串行执行任务,并且需要长时间等待用户输入: (2)批处理:预先将用户的指令集集中成清单,批量串行处 ...
- Java多线程与并发相关 — 原理
Java多线程与并发相关 - 原理 一 synchronized同步 1. 线程安全问题的主要诱因? 存在共享资源(也称临界资源); 存在多条线程共同操作这些共享数据; 2. 解决办法. 同一时刻有且 ...
- Java 多线程与并发编程专题
Java 线程基础 Java 多线程开发 线程安全与同步 并发控制 非阻塞套接字(NIO) Java 5 中的并发 JDK 7 中的 Fork/Join 模式 相关书评 Java 平台提供了一套广泛而 ...
最新文章
- 爱上MVC~ajax调用分部视图session超时页面跳转问题
- python按行求和_Python第一篇:对3个Excel文件进行整合
- 【bfs】WJ的逃离
- mysql sum_MySQL中的SUM函数使用教程
- 【论文写作】网上选课系统中数据库设计模块如何写
- 分布式事务处理学习报告
- 人工智能——前言概述
- 点菜系统软件源码(点菜软件源码分享)
- cvtColor +内存泄漏
- KDJ算法详解,比百度百科要详细
- 命令行查看基金实时涨跌(附完整代码)
- layui laydate设置最小时间为当前时间
- 2024 递归Eason
- 【问题记录】02 Linux服务器安装MySql数据库报错:Failing package is: mysql-community-server GPG Keys are configured as
- 30天自制操作系统:第五天 结构体、文字显示与 GDT/IDT初始化
- 9343拆机 xps13_《拆机Pa》十二期 第二代XPS 13是进步还是退步
- word表格分开快捷键_word文档如何快速拆分表格,干货!怎样快速拆分表格以及快速合并表格技巧介绍...
- vue cli3源码解析
- 【狮子数学】chapter3-08-积分证明问题(第67——68)
- 初尝ACM,感觉?挺美妙。