吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1768|回复: 2
收起左侧

[Java 转载] Java练习题

  [复制链接]
西楠 发表于 2020-11-9 10:25
    老师布置作业,模拟卖票。
[Java] 纯文本查看 复制代码
/*java多线程模拟实现12306售票

业务描述
	假设有200张票,用4个线程去订票,不能有两个或者以上的线程订到了
	同一个票(原因就不说了),当最后一张票卖掉的时候结束,再订就抛
	异常提示出票卖完了。

业务分析,要实现以上功能,

	1、需要创建一个车票类,初始化票,卖票的接口saleTicket()

	2、自定义异常的一个类。

	3、创建卖票线程类,在run方法中卖车票。

	4、初始化车票的线程,负责初始化车票,也就是初始化Ticket类中的数组。

	5、创建主方法进行测试。*/
public class Test {
    public static void main(String[] args) {
        Ticket ticket=new Ticket();
        Thread thread=new Thread(new InitializationTicketThread(ticket));
        thread.start();
        try {
            thread.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        Thread thread1=new Thread(new SaleTicketThread(ticket));
        Thread thread2=new Thread(new SaleTicketThread(ticket));
        Thread thread3=new Thread(new SaleTicketThread(ticket));
        Thread thread4=new Thread(new SaleTicketThread(ticket));
        thread1.setName("1号售票窗口");
        thread2.setName("2号售票窗口");
        thread3.setName("3号售票窗口");
        thread4.setName("4号售票窗口");
        thread1.start();
        thread2.start();
        thread3.start();
        thread4.start();
    }
}
interface SaleTicket{
    String saleTicket()throws SaleTicketException;
}
class Ticket implements SaleTicket{
    private String[] tickets=new String[200];
    private int index=0;

    public Ticket() {
    }

    public Ticket(String[] tickets, int index) {
        this.tickets = tickets;
        this.index = index;
    }

    public String[] getTickets() {
        return tickets;
    }

    public void setTickets(String[] tickets) {
        this.tickets = tickets;
    }

    public int getIndex() {
        return index;
    }

    public void setIndex(int index) {
        this.index = index;
    }

    public void initializationTicket(){
        for (int i=0;i<tickets.length;i++){
            tickets[i]=i+1+"号车票";
        }
    }
    public synchronized String saleTicket() throws SaleTicketException {
        if (index<tickets.length&&tickets[index]!=null){
            String str=Thread.currentThread().getName()+"--->成功卖出"+tickets[index];
            tickets[index++]=null;
            return str;
        }else {
            throw new SaleTicketException("票已经卖完了,买票失败");
        }
    }
}
class SaleTicketThread implements Runnable{
    private Ticket ticket;

    public SaleTicketThread(Ticket ticket) {
        this.ticket = ticket;
    }

    public void run() {
        for (int i=0;i<60;i++){
            try {
                System.out.println(ticket.saleTicket());
            } catch (SaleTicketException e) {
                e.printStackTrace();
                break;
            }
        }
    }
}
class InitializationTicketThread implements Runnable{
    private Ticket ticket;

    public InitializationTicketThread(Ticket ticket) {
        this.ticket = ticket;
    }

    public void run() {
        ticket.initializationTicket();
    }
}
class SaleTicketException extends Exception {
    public SaleTicketException() {
    }

    public SaleTicketException(String message) {
        super(message);
    }
}

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
zxcvbnm12 + 1 + 1 sercet

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

zxcvbnm12 发表于 2020-11-9 12:02
楠兄这个题好熟悉
 楼主| 西楠 发表于 2020-11-9 12:05
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-29 04:03

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表