public class HappyCinema {
public static void main(String[] args) {
// TODO Auto-generated method stub
List<Integer> available=new ArrayList<Integer>();
available.add(3);
available.add(2);
available.add(5);
available.add(1);
available.add(6);
available.add(7);
available.add(10);
//顾客的位置
List<Integer> seats1=new ArrayList<Integer>();
seats1.add(5);
seats1.add(7);
seats1.add(2);
List<Integer> seats2=new ArrayList<Integer>();
seats2.add(3);
seats2.add(5);
seats2.add(7);
Cinema c=new Cinema(available,"wanjia");
new Thread(new Customer(c,seats1),"lsy").start();
new Thread(new Customer(c,seats2),"lcw").start();
}
}
//有多个顾客,所以得创建多个线程。因此继承接口。
class Customer implements Runnable{
Cinema cinema;
List<Integer> seats;
public Customer(Cinema cinema,List<Integer> seats) {
super();
this.cinema = cinema;
this.seats = seats;
}
@Override
public void run() {
synchronized (cinema) {
boolean flag=cinema.bookTickets(seats);
if(flag) {
System.out.println("出票成功"+Thread.currentThread().getName()+"-->位置为"+seats);
}else {
System.out.println("出票失败"+Thread.currentThread().getName()+"-->位置不够");
}
}
}
}
class Cinema{
List<Integer> available;//可用的位置
String name;//名称
public Cinema(List<Integer> available, String name) {
super();
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;
}
}
多线程模拟电影院选位置
猜你喜欢
转载自blog.csdn.net/weixin_43328816/article/details/104415786
今日推荐
周排行