Java多线程学习——例子:模拟电影院抢座位
Cinema——List<Integer>数据结构存储电影院座位
public class Cinema{
private List<Integer> seats; //剩余座位 public Cinema(List<Integer> seats) {
this.seats = seats;
} public boolean seatGrabbing(List<Integer> needTickets){ if(needTickets.size()>seats.size()){
return false;
}
synchronized (this) {
if(needTickets.size()>seats.size()){
return false;
}
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("剩余座位:" + seats);
List<Integer> tmpSeats=new ArrayList<Integer>();
tmpSeats.addAll(seats);
tmpSeats.removeAll(needTickets);
if(seats.size()-tmpSeats.size()==needTickets.size()){
seats=tmpSeats;
return true;
}else {
return false;
}
}
}
}
CinemaCustomer
public class CinemaCustomer implements Runnable {
private List<Integer> needTickets; //需要的票
private Cinema cinema;
private boolean isGetTickets=false; public CinemaCustomer(List<Integer> needTickets, Cinema cinema) {
this.needTickets = needTickets;
this.cinema = cinema;
} @Override
public void run() {
isGetTickets=cinema.seatGrabbing(needTickets);
if(isGetTickets){
System.out.println(Thread.currentThread().getName()+"抢票成功"+needTickets);
}else{
System.out.println("抢票失败"+needTickets);
}
}
}
GrabbingTickets
public class GrabbingTickets {
public static void main(String[] args) {
List<Integer> seats=new ArrayList<Integer>(); //总座位
seats.add(1);
seats.add(2);
seats.add(3);
seats.add(4);
seats.add(5);
Cinema cinema=new Cinema(seats); List<Integer> seat1=new ArrayList<Integer>();
seat1.add(1);
seat1.add(2); List<Integer> seat2=new ArrayList<Integer>();
seat2.add(5);
seat2.add(4); new Thread(new CinemaCustomer(seat1,cinema),"Tom").start();
new Thread(new CinemaCustomer(seat2,cinema),"Job").start();
}
}
很简单的一个例子,但是体会到了线程同步,也学会使用容器的一些常用方法。
Java多线程学习——例子:模拟电影院抢座位的更多相关文章
- Java多线程学习(转载)
Java多线程学习(转载) 时间:2015-03-14 13:53:14 阅读:137413 评论:4 收藏:3 [点我收藏+] 转载 :http://blog ...
- java多线程学习笔记——详细
一.线程类 1.新建状态(New):新创建了一个线程对象. 2.就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法.该状态的线程位于可运行线程池中, ...
- 【转】Java多线程学习
来源:http://www.cnblogs.com/samzeng/p/3546084.html Java多线程学习总结--线程概述及创建线程的方式(1) 在Java开发中,多线程是很常用的,用得好的 ...
- Java多线程学习(四)等待/通知(wait/notify)机制
转载请备注地址:https://blog.csdn.net/qq_34337272/article/details/79690279 系列文章传送门: Java多线程学习(一)Java多线程入门 Ja ...
- 转:Java多线程学习(总结很详细!!!)
Java多线程学习(总结很详细!!!) 此文只能说是java多线程的一个入门,其实Java里头线程完全可以写一本书了,但是如果最基本的你都学掌握好,又怎么能更上一个台阶呢? 本文主要讲java中多线程 ...
- Java多线程学习(吐血超详细总结)
Java多线程学习(吐血超详细总结) 林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 写在前面的话:此文只能说是java多线程的一个入门,其实 ...
- [转]Java多线程学习(总结很详细!!!)
Java多线程学习(总结很详细!!!) 此文只能说是java多线程的一个入门,其实Java里头线程完全可以写一本书了,但是如果最基本的你都学掌握好,又怎么能更上一个台阶呢? 本文主要讲java中多线程 ...
- Java多线程学习笔记
进程:正在执行中的程序,其实是应用程序在内存中运行的那片空间.(只负责空间分配) 线程:进程中的一个执行单元,负责进程汇总的程序的运行,一个进程当中至少要有一个线程. 多线程:一个进程中时可以有多个线 ...
- JAVA多线程学习笔记(1)
JAVA多线程学习笔记(1) 由于笔者使用markdown格式书写,后续copy到blog可能存在格式不美观的问题,本文的.mk文件已经上传到个人的github,会进行同步更新.github传送门 一 ...
随机推荐
- Codeforces 898 贪心关闭最少闹钟 优先队列最少操作构造N/2squares 讨论情况哈希数字串分割a+b=c
A /* Huyyt */ #include <bits/stdc++.h> #define mem(a,b) memset(a,b,sizeof(a)) #define mkp(a,b) ...
- linux命令历史
本人qq群也有许多的技术文档,希望可以为你提供一些帮助(非技术的勿加). QQ群: 281442983 (点击链接加入群:http://jq.qq.com/?_wv=1027&k=29Lo ...
- 【视频点播最佳实践】使用OSS SDK上传视频到点播
摘要: 场景 点播上传SDK缺乏需要的语言版本(如C/C++.Go等)或相应的功能(如网络流上传.追加上传),可以直接使用OSS的SDK进行上传. 准备工作 确认已开通点播服务并完成了相关配置.确认已 ...
- cssfloat布局以及其他小技巧
css float 布局以及其他小技巧总结 这篇博文 前面四个部分是关于css 经典布局 如果你已经知道了 可以直接跳过看第六部分 css 的其他小技巧 1.0 左右居中布局 <!DOCTYPE ...
- 移动UI控件Telerik UI for Xamarin发布R2 2019|引入Map控件
Telerik UI for Xamarin是一个构建跨平台移动应用程序的原生UI.Telerik UI for Xamarin使用Xamarin.Forms技术,它可以让开发人员从一个单一的共享C# ...
- C#对应JavaScript的银行家舍入规则(Math.Round()对应toFixed(f))
Math.Round((n * u - t * u )/ u, f);//这里使用银行家四舍五入对应JS的 toFixed() ((n * u - t * u) / u).toFixed(f) f为小 ...
- 使用bitmap实现对一千万个无重复的正整数(范围1~1亿)快速排序
1 Bytes(字节) == 8 bit 1 KBytes == 1024 Bytes 思路: 1)申请长度为1亿的保存二进制位的数组 a, 2)通过位运算,将整数做为索引,将数组a对应的索引位置为1 ...
- Mybatis mysql 一个搜索框多个字段模糊查询 几种方法
第一种 or 根据搜索框给定的关键词,模糊搜索用户名和账号都匹配的用户集合 <select id="list" parameterType="com.user.Us ...
- mysql 普通用户与权限
1.创建用户 mysql> create user 'myself'@'%' identified by 'Myself'; Query OK, 0 rows affected mysql> ...
- BZOJ 2157: 旅游 (结构体存变量)
用结构体存变量好像确实能提高运行速度,以后就这么写数据结构了 Code: #include <cstdio> #include <algorithm> #include < ...