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多线程学习——例子:模拟电影院抢座位的更多相关文章

  1. Java多线程学习(转载)

    Java多线程学习(转载) 时间:2015-03-14 13:53:14      阅读:137413      评论:4      收藏:3      [点我收藏+] 转载 :http://blog ...

  2. java多线程学习笔记——详细

    一.线程类  1.新建状态(New):新创建了一个线程对象.        2.就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法.该状态的线程位于可运行线程池中, ...

  3. 【转】Java多线程学习

    来源:http://www.cnblogs.com/samzeng/p/3546084.html Java多线程学习总结--线程概述及创建线程的方式(1) 在Java开发中,多线程是很常用的,用得好的 ...

  4. Java多线程学习(四)等待/通知(wait/notify)机制

    转载请备注地址:https://blog.csdn.net/qq_34337272/article/details/79690279 系列文章传送门: Java多线程学习(一)Java多线程入门 Ja ...

  5. 转:Java多线程学习(总结很详细!!!)

    Java多线程学习(总结很详细!!!) 此文只能说是java多线程的一个入门,其实Java里头线程完全可以写一本书了,但是如果最基本的你都学掌握好,又怎么能更上一个台阶呢? 本文主要讲java中多线程 ...

  6. Java多线程学习(吐血超详细总结)

    Java多线程学习(吐血超详细总结) 林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 写在前面的话:此文只能说是java多线程的一个入门,其实 ...

  7. [转]Java多线程学习(总结很详细!!!)

    Java多线程学习(总结很详细!!!) 此文只能说是java多线程的一个入门,其实Java里头线程完全可以写一本书了,但是如果最基本的你都学掌握好,又怎么能更上一个台阶呢? 本文主要讲java中多线程 ...

  8. Java多线程学习笔记

    进程:正在执行中的程序,其实是应用程序在内存中运行的那片空间.(只负责空间分配) 线程:进程中的一个执行单元,负责进程汇总的程序的运行,一个进程当中至少要有一个线程. 多线程:一个进程中时可以有多个线 ...

  9. JAVA多线程学习笔记(1)

    JAVA多线程学习笔记(1) 由于笔者使用markdown格式书写,后续copy到blog可能存在格式不美观的问题,本文的.mk文件已经上传到个人的github,会进行同步更新.github传送门 一 ...

随机推荐

  1. Codeforces 911 三循环数覆盖问题 逆序对数结论题 栈操作模拟

    A #include <bits/stdc++.h> #define PI acos(-1.0) #define mem(a,b) memset((a),b,sizeof(a)) #def ...

  2. yaourt

    https://blog.csdn.net/relcodego/article/details/50531379 https://blog.csdn.net/lsvtogergo/article/de ...

  3. Parallel并行循环

    Parallel.For(, , new ParallelOptions() { MaxDegreeOfParallelism = 100 },(i, pls) => { ) { pls.Bre ...

  4. Java并发编程实战 第15章 原子变量和非阻塞同步机制

    非阻塞的同步机制 简单的说,那就是又要实现同步,又不使用锁. 与基于锁的方案相比,非阻塞算法的实现要麻烦的多,但是它的可伸缩性和活跃性上拥有巨大的优势. 实现非阻塞算法的常见方法就是使用volatil ...

  5. 基本运算符与if while详解:

    ''' 基本运算符与if while详解: ''' # 算术运算符 # + - * / % // ** # 返回一个数值 # 比较运算符 # > >= < <= == != # ...

  6. Jmeter启动jmeter-server.bat 报java.io.FileNotFoundException:rmi_keystore.jks 解决方法

    解决方法:1.找到apache-jmeter-5.0\bin\jmeter.properties 2.修改server.rmi.ssl.disable=true (记得去除server.rmi.ssl ...

  7. 【BZOJ 3681】Arietta

    传送门 题目描述 Arietta 的命运与她的妹妹不同,在她的妹妹已经走进学院的时候,她仍然留在山村中. 但是她从未停止过和恋人 Velding 的书信往来.一天,她准备去探访他. 对着窗外的阳光,临 ...

  8. vue项目刷新页面,使数据不丢失(sessionStorage、localStorage、cookie)

    vue项目刷新页面时,存储在vuex中的数据会丢失,把他们存到stroage中可以保证不丢失.

  9. Python---webserver项目

    # HTTP项目实战 - 深入理解HTTP协议 - 模拟后台服务程序基本流程和大致框架 - 每一个步骤一个文件夹 - 图解http协议,图解tcp/ip协议 # v01-验证技术 - 验证socket ...

  10. 给DEDECMS广告管理中增加图片上传功能

    dedecms的广告管理功能稍微有点次,本文就是在dedecms广告管理原有的基础上增加广告图片上传功能. 安装方法,对应自己的dedecms版本下载对应的编码然后解压把里面的文件放在后台目录覆盖即可 ...