三大案例再升级
【小城贝尔】
三大案例再升级,模拟影院票信息。
一个影院多人座,好似关系一对多。
时长多用块中锁,买票操作多端落。
现在挑战方法锁,操作即往一种括。
及时线程来强转,抓住子类来平反。
容器并发J U C,数组书写上拷贝。
内部已有安全锁,线程万千易操作。

三大案例再升级,模拟影院票信息。
一个影院多人座,好似关系一对多。

class HappyCimema{List<Integer> cSeat;String cName;public HappyCimema(List<Integer> cSeat, String cName) {this.cSeat = cSeat;this.cName = cName;}
}
class Client implements  Runnable{private  HappyCimema hc;private List<Integer> seats;public Client(HappyCimema hc, List<Integer> seats) {this.hc = hc;this.seats = seats;}@Overridepublic void run() {buyFilmTickets();}public boolean buyFilmTickets() {//双重检测if(hc.cSeat.size() == 0){System.out.println(Thread.currentThread().getName() + "不好意思 票买完啦。。。。。。 ");return false;}synchronized (hc) {//获得影院所有的座位List<Integer> cSeat = hc.cSeat;//拷贝一份影院座位操作List<Integer> copy = new ArrayList<>();copy.addAll(cSeat);//将选定的座位和影院已经有的座位比较copy.removeAll(seats);//入过影院的座位数减去操作后的数量 刚好等于我们选得座位则购票成功if (cSeat.size() - copy.size() == seats.size()) {this.hc.cSeat = copy;System.out.println(Thread.currentThread().getName() + "您已经购票 ====> " + this.seats + "还剩下座位===>" + this.hc.cSeat);return true;} else {System.out.println(Thread.currentThread().getName() + "您购票失败 你的选择是 :====> " + this.seats + "还剩下座位是:===>" + this.hc.cSeat);return false;}}}
}
class  TestHappyCimema{public static void main(String[] args) {List<Integer> cSeate = new ArrayList<>();cSeate.add(1);cSeate.add(2);cSeate.add(3);cSeate.add(4);cSeate.add(5);cSeate.add(6);cSeate.add(7);List<Integer> c1 = new ArrayList<>();c1.add(2);c1.add(3);List<Integer> c2 = new ArrayList<>();c2 .add(4);c2 .add(3);List<Integer> c3 = new ArrayList<>();c3.add(1);c3.add(5);c3.add(6);HappyCimema hc = new HappyCimema(cSeate,"HappyCimemaa");new Thread(new Client(hc,c1),"亚历山大").start();new Thread(new Client(hc,c2),"马相伯").start();new Thread(new Client(hc,c3),"图灵").start();}
}> "C:\Program Files (x86)\Java\jdk1.8.0_201\bin\java.exe" "-javaagent:D:\intellij\IntelliJ IDEA 2019.1.2\lib\idea_rt.jar=53869:D:\intellij\IntelliJ IDEA 2019.1.2\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\charsets.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\deploy.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\ext\access-bridge-32.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\ext\cldrdata.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\ext\dnsns.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\ext\jaccess.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\ext\jfxrt.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\ext\localedata.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\ext\nashorn.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\ext\sunec.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\ext\sunjce_provider.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\ext\sunmscapi.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\ext\sunpkcs11.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\ext\zipfs.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\javaws.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\jce.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\jfr.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\jfxswt.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\jsse.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\management-agent.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\plugin.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\resources.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\rt.jar;C:\Users\Administrator.QH-20190223RNEB\IdeaProjects\untitled\out\production\untitled;C:\Users\Administrator.QH-20190223RNEB\IdeaProjects\untitled\src\commons-io-2.6.jar;C:\Users\Administrator.QH-20190223RNEB\IdeaProjects\untitled\src\commons-io-2.6-tests.jar;C:\Users\Administrator.QH-20190223RNEB\IdeaProjects\untitled\src\commons-io-2.6-javadoc.jar;C:\Users\Administrator.QH-20190223RNEB\IdeaProjects\untitled\src\commons-io-2.6-sources.jar;C:\Users\Administrator.QH-20190223RNEB\IdeaProjects\untitled\src\commons-io-2.6-test-sources.jar" concurrently.ThreeDemoPluse.TestHappyCimema
亚历山大您已经购票 ====> [2, 3]还剩下座位===>[1, 4, 5, 6, 7]
图灵您已经购票 ====> [1, 5, 6]还剩下座位===>[4, 7]
马相伯您购票失败 你的选择是 :====> [4, 3]还剩下座位是:===>[4, 7]Process finished with exit code 0

时长多用块中锁,买票操作多端落。
现在挑战方法锁,操作即往一种括。
及时线程来强转,抓住子类来平反。

/***************************使用方法锁***************************/
class Web12306 implements Runnable{int tickets = 100;@Overridepublic void run() {sellTickets();}private synchronized void sellTickets() {Passager p = (Passager) Thread.currentThread();//获得用户想购买的票数int num = p.tickes;int bougt = 0;while (num > 0) {if (tickets <= 0) {System.out.println(Thread.currentThread().getName() + "票没了");return;}try {Thread.sleep(300);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Thread.currentThread().getName() + "你已成功购票   "+(++bougt) + "   还剩下 ====》 "+(--tickets));num--;}}
}class Passager extends  Thread{int tickes;String pName;public Passager(Runnable target , int tickes, String pName) {super(target,pName);this.tickes = tickes;}
}
class  TestWeb12306{public static void main(String[] args) {Web12306 we = new Web12306();Passager p = new Passager(we,8,"支付宝");Passager p1 = new Passager(we,10,"美团");Passager p2 = new Passager(we,3,"微信");p.start();p1.start();p2.start();Passager p3 = new Passager(we,10,"平多多");Passager p4 = new Passager(we,9,"京东");p3.start();p4.start();}
}> "C:\Program Files (x86)\Java\jdk1.8.0_201\bin\java.exe" "-javaagent:D:\intellij\IntelliJ IDEA 2019.1.2\lib\idea_rt.jar=53853:D:\intellij\IntelliJ IDEA 2019.1.2\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\charsets.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\deploy.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\ext\access-bridge-32.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\ext\cldrdata.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\ext\dnsns.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\ext\jaccess.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\ext\jfxrt.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\ext\localedata.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\ext\nashorn.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\ext\sunec.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\ext\sunjce_provider.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\ext\sunmscapi.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\ext\sunpkcs11.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\ext\zipfs.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\javaws.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\jce.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\jfr.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\jfxswt.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\jsse.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\management-agent.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\plugin.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\resources.jar;C:\Program Files (x86)\Java\jdk1.8.0_201\jre\lib\rt.jar;C:\Users\Administrator.QH-20190223RNEB\IdeaProjects\untitled\out\production\untitled;C:\Users\Administrator.QH-20190223RNEB\IdeaProjects\untitled\src\commons-io-2.6.jar;C:\Users\Administrator.QH-20190223RNEB\IdeaProjects\untitled\src\commons-io-2.6-tests.jar;C:\Users\Administrator.QH-20190223RNEB\IdeaProjects\untitled\src\commons-io-2.6-javadoc.jar;C:\Users\Administrator.QH-20190223RNEB\IdeaProjects\untitled\src\commons-io-2.6-sources.jar;C:\Users\Administrator.QH-20190223RNEB\IdeaProjects\untitled\src\commons-io-2.6-test-sources.jar" concurrently.ThreeDemoPluse.TestWeb12306
支付宝你已成功购票   1   还剩下 ====》 99
支付宝你已成功购票   2   还剩下 ====》 98
支付宝你已成功购票   3   还剩下 ====》 97
支付宝你已成功购票   4   还剩下 ====》 96
支付宝你已成功购票   5   还剩下 ====》 95
支付宝你已成功购票   6   还剩下 ====》 94
支付宝你已成功购票   7   还剩下 ====》 93
支付宝你已成功购票   8   还剩下 ====》 92
平多多你已成功购票   1   还剩下 ====》 91
平多多你已成功购票   2   还剩下 ====》 90
平多多你已成功购票   3   还剩下 ====》 89
平多多你已成功购票   4   还剩下 ====》 88
平多多你已成功购票   5   还剩下 ====》 87
平多多你已成功购票   6   还剩下 ====》 86
平多多你已成功购票   7   还剩下 ====》 85
平多多你已成功购票   8   还剩下 ====》 84
平多多你已成功购票   9   还剩下 ====》 83
平多多你已成功购票   10   还剩下 ====》 82
美团你已成功购票   1   还剩下 ====》 81
美团你已成功购票   2   还剩下 ====》 80
美团你已成功购票   3   还剩下 ====》 79
美团你已成功购票   4   还剩下 ====》 78
美团你已成功购票   5   还剩下 ====》 77
美团你已成功购票   6   还剩下 ====》 76
美团你已成功购票   7   还剩下 ====》 75
美团你已成功购票   8   还剩下 ====》 74
美团你已成功购票   9   还剩下 ====》 73
美团你已成功购票   10   还剩下 ====》 72
京东你已成功购票   1   还剩下 ====》 71
京东你已成功购票   2   还剩下 ====》 70
京东你已成功购票   3   还剩下 ====》 69
京东你已成功购票   4   还剩下 ====》 68
京东你已成功购票   5   还剩下 ====》 67
京东你已成功购票   6   还剩下 ====》 66
京东你已成功购票   7   还剩下 ====》 65
京东你已成功购票   8   还剩下 ====》 64
京东你已成功购票   9   还剩下 ====》 63
微信你已成功购票   1   还剩下 ====》 62
微信你已成功购票   2   还剩下 ====》 61
微信你已成功购票   3   还剩下 ====》 60Process finished with exit code 0

容器并发J U C,数组书写上拷贝。
内部已有安全锁,线程万千易操作。

/**********************************************************/
class CopyOnWriteArray{public static void main(String[] args) {//是线程安全的java.util.concurrent.CopyOnWriteArrayList<Integer> cowal = new java.util.concurrent.CopyOnWriteArrayList<Integer>();cowal.add(1);}
}

原 自学JVAVA---(64)--(内功心法【62】)三大案例再升级相关推荐

  1. Python自学笔记9:实操案例六(千年虫,购物流程)

    Python自学笔记9:实操案例六(千年虫,购物流程) 网课传送门:第155,156讲,https://www.bilibili.com/video/BV1Sw411Z779?p=155 1.千年虫 ...

  2. 自学机器学习应该避免的三大误区与陷阱

    作为人工智能的核心,机器学习成为炙手可热的概念.很多朋友都开始进入机器学习的大军之中,不知道大家在学习的过程中是否注意到"自学机器学习应该避免的三大误区与陷阱"呢?下面小编就和大家 ...

  3. python爬虫案例-Python3爬虫三大案例实战分享

    课程名称: [温馨提示:1. 你可以在PC端浏览器或者微信收藏该页面,以方便你快速找到这个课程:2. 课程相关资料可在课程PC端公告查看下载:3.加入课程后,点(课时)列表即可观看视频 ] 课程须知: ...

  4. Python自学笔记6:实操案例三(十进制转换二、八、十六进制),手机充值,计算能量消耗,预测未来子女身高

    Python自学笔记6:实操案例三(十进制转换二.八.十六进制),手机充值,计算能量消耗,预测未来子女身高 杨淑娟老师网课传送门(非广告):https://www.bilibili.com/video ...

  5. Python自学笔记10:实操案例七(根据星座测试性格特点、模拟12306火车订票下单)

    Python自学笔记10:实操案例七(根据星座测试性格特点.模拟12306火车订票下单) 网课传送门:https://www.bilibili.com/video/BV1Sw411Z779?p=157 ...

  6. Python自学笔记5:实操案例二(输出出版图书信息、《红楼梦》五位人名、图书音像勋章、身体指标)

    Python自学笔记4:实操案例二(输出出版图书信息.<红楼梦>五位人名.图书音像勋章.身体指标) 1.输出出版图书信息 这个没啥难度,就是定义变量然后输出,注意调整格式就行 book_n ...

  7. 64位Windows2003 Enterprise sp2 上64位Oracle10.2.0.1升级到Oracle10.2.0.3具体步骤

    64位Windows2003 Enterprise sp2 上64位Oracle10.2.0.1升级到Oracle10.2.0.3具体步骤 错误描述:64位的Oracle10.2.0.1版本在64位W ...

  8. iMac 27 2011款增加2块SSD硬盘,保留原机械硬盘,共3块硬盘,升级cpu,修显卡,安装macOS及Win10双系统

    iMac 27 2011款增加2块SSD硬盘,保留原机械硬盘,共3块硬盘,升级cpu,修显卡,安装macOS及Win10双系统. 最近想换一个5K屏的iMac,在闲鱼找了一个iMac 27 2017款 ...

  9. Tapestry携旗下蔻驰等三大品牌再赴进博会;星巴克连续第三年成为进博会支持企业 | 美通企业日报...

    今日看点 Tapestry亮相第三届进博会,携旗下三大品牌再赴"进博之约".连续第二年参展的现代奢华配饰及生活方式类品牌公司Tapestry, Inc.(泰佩思琦)携旗下三大品牌C ...

最新文章

  1. 老板的亲戚给我当助手?
  2. 视音频技术零基础学习方法
  3. 《 Spring1之第二次站立会议(重发)》
  4. python os.removedirs() 和shutil.rmtree()(os.removedirs用于删除非空文件夹和子文件夹、shutil.rmtree用于删除文件夹下所有文件夹和文件)
  5. 15分钟从零开始搭建支持10w+用户的生产环境(四)
  6. CSS常用的元素居中方法
  7. php js记住密码功能,jquery.cookie.js实现用户登录保存密码功能的方法_jquery
  8. [转]ASP.NET MVC IOC 之AutoFac攻略
  9. 5.从Paxos到Zookeeper分布式一致性原理与实践---使用ZooKeeper
  10. 【单目标优化求解】基于matlab海洋捕食者算法(MPA)求解单目标问题【含Matlab源码 478期】
  11. c++常用备忘(持续更新)
  12. 总结——达内视频(二)
  13. 学习数据库的概念,作用
  14. 安卓夜神模拟器设置代理
  15. GridView分页 记录总数:15 总页数:2 当前页:1 首页 上一页 下一页 尾页 GO
  16. Hadoop:MapReduce编程之统计每个订单价格最高的商品信息
  17. mac book pro touchbar 黑屏不亮的问题解决
  18. 第三节:TIPTOP ERP系统成本问题集
  19. ai外呼营销系统_AI外呼?智能外呼或成营销服务一体化中的必备工具
  20. 在Ubuntu中安装wannier90-3.1.0(非Intel-toolchain)

热门文章

  1. 移动应用程序设计/开发:jQuery Mobile入门指南
  2. 世界500强公司要求员工必须熟练掌握的七种工作方法
  3. 关于applet小程序在浏览器上运行的备注
  4. python中os system_Python调用系统命令os.system()和os.popen()的实现
  5. 汉明码纠错java_汉明码纠错的基本原理及优化解决方案
  6. 2018年python薪资_最好的Python:2017和2018年至今我最喜欢的文章集
  7. 算法24c语言,EEPROM(AT24C16)页写算法
  8. 企业中了勒索病毒该怎么办?可以解密吗?
  9. 时间加减计算器_财政局刚刚回应丨禁止携带计算器,否则成绩无效!
  10. 【奥斯卡理财星体系 第五章】丨手把手教你从零开始搭建资产配置