栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java多线程实现电影院在线选座

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java多线程实现电影院在线选座

package com.test;

import java.util.ArrayList;
import java.util.List;


public class Test{
    
    public static void main(String[] args) {
        //可用位置
        List available =new ArrayList();
        for(int i=1; i<=10; i++) {
            available.add(Integer.valueOf(i)); //默认添加1-10号位置
        }

        //模拟5个顾客,需要的位置
        List seats1 =new ArrayList();
        seats1.add(1);
        seats1.add(2);
        List seats2 =new ArrayList();
        seats2.add(3);
        seats2.add(6);
        List seats3 =new ArrayList();
        seats3.add(4);
        seats3.add(8);
        seats3.add(9);
        List seats4=new ArrayList();
        seats4.add(2);
        seats4.add(3);
        seats4.add(4);
        
        Cinema cinema = new Cinema(available,"万达影院");
        
        //为每个顾客开辟一个线程,让系统自动调度
        new Thread(new Customer(cinema,seats1),"小华").start();
        new Thread(new Customer(cinema,seats2),"小红").start();
        new Thread(new Customer(cinema,seats3),"小丽").start();
        new Thread(new Customer(cinema,seats4),"小明").start();
    
    
    
    }
    
}
//顾客
class Customer implements Runnable {
    Cinema cinema;
    List seats; //顾客选的座位数量
    
    public Customer(Cinema cinema, List seats) {
        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()+"需要"+seats+"-->位置不够");
            }
            System.out.println("当前可用的位置为:"+cinema.available);
            System.out.println("--------------------");
        }
        
    }
}
//电影院
class Cinema {
    List available; //可用的座位数量
    String name; //名称
    
    public Cinema(List available, String name) {
        this.available = available;
        this.name = name;
    }
    
    //购票
    public boolean bookTickets(List seats) {
        
        List copy = new ArrayList<>();
        copy.addAll(available);
        
        //移除顾客购买位置
        copy.removeAll(seats);
        //判断
        if(available.size() - copy.size() != seats.size()) {
            return false;
        }
        available = copy;
        return true;
    }
}

运行截图:

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/781927.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号