用代码来模拟铁路售票系统,实现通过四个售票点发售某日某次列车的100张车票,一个售票点用一个线程表示

用代码来模拟铁路售票系统,实现通过四个售票点发售某日某次列车的100张车票,一个售票点用一个线程表示

package ch0012;

class SellTicket implements Runnable{
   
    int count=100;
    public void run(){
   
        while(count>0){
   
            sell();
            try {
   
                Thread
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 以下是一个简单的铁路售票系统模拟程序: ```java import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class TicketSystem implements Runnable { private static int totalTickets = 50; // 总票数 private static Lock lock = new ReentrantLock(); // 锁对象 private String sellerName; // 代售名称 public TicketSystem(String sellerName) { this.sellerName = sellerName; } @Override public void run() { while (totalTickets > 0) { try { lock.lock(); // 获取锁 if (totalTickets > 0) { System.out.println(sellerName + "卖出了一票,剩余票数:" + --totalTickets); } } finally { lock.unlock(); // 释放锁 } } } public static void main(String[] args) { Thread t1 = new Thread(new TicketSystem("代售1")); Thread t2 = new Thread(new TicketSystem("代售2")); Thread t3 = new Thread(new TicketSystem("代售3")); t1.start(); t2.start(); t3.start(); } } ``` 程序中使用了一个静态变量 `totalTickets` 来表示总票数,每个线程代表一个售票点,当总票数大于 0 时,就可以进行售票。在售票时需要加锁,以保证多个售票点不会同时卖出同一票。程序中使用了 `ReentrantLock` 来实现锁的功能。当售票完成后,需要释放锁,以便其他售票点可以继续售票。 ### 回答2: 编写程序模拟铁路售票系统可以通过实现Runnable接口的方法来实现。首先创建一个Ticket类,用于表示票的信息,包括票号、车次、日期等属性。然后创建一个TicketCounter类,实现Runnable接口,代表一个售票代理。 在TicketCounter类中,定义一个静态的票池,用来存储待售的票。在run方法中,使用synchronized关键字对票池进行同步处理,以避免多个售票代理同时售卖同一票。具体的售票过程如下: 1. 判断票池中是否还有票可售。如果没有,则结束售票。 2. 从票池中取出一待售的票,并更新票的状态为“已售”。 3. 打印出售票的信息,包括代售、票号、车次、日期等。 4. 通过Thread.sleep方法模拟售票的时间。 5. 售票完成后,将票的信息存入日志文件中。 在主程序中,创建三个售票代理,并分别以它们为参数创建三个线程。然后通过线程的start方法启动这三个代售的售票过程。 最后,在主程序中使用join方法,确保程序等待所有售票线程执行完毕后再结束,并输出售票结束的提示信息。 这样就能够模拟铁路售票系统,通过三个代售发售某日某次列车的50票。售票过程中通过实现Runnable接口、同步处理和模拟时间等方式,更贴近实际的售票系统运作情景。 ### 回答3: 铁路售票系统模拟程序可以通过实现Runnable接口的方式来实现。首先,我们需要创建一个Ticket类来表示票,包括票的编号、代售编号和座位号等信息。接着,我们创建一个代售类,代售实现Runnable接口,表示一个代售的售票过程。 在代售的售票过程中,我们使用一个静态变量count来表示已售出的票数量,初始值为0。在售票过程中,使用一个循环来判断是否还有票可售,如果还有票可售,则创建一个新的Ticket对象,设置相关信息并将其添加到一个共享的集合票集合中,同时将count加1。在售票过程中,使用synchronized关键字来确保多个代售之间的售票互斥,避免出现多个代售同时售出同一票的情况。 最后,创建三个代售对象,分别作为线程启动并运行。每个代售在其run方法中执行售票过程。当票数达到50时,停止售票。 具体的代码如下: ```java public class Ticket { private String ticketNo; private int agentNo; private int seatNo; public Ticket(String ticketNo, int agentNo, int seatNo) { this.ticketNo = ticketNo; this.agentNo = agentNo; this.seatNo = seatNo; } // 省略getter和setter方法 } public class TicketAgent implements Runnable { private static final int MAX_TICKETS = 50; private static int count = 0; private int agentNo; private List<Ticket> tickets; public TicketAgent(int agentNo) { this.agentNo = agentNo; this.tickets = new ArrayList<>(); } @Override public void run() { while (count < MAX_TICKETS) { synchronized (TicketAgent.class) { if (count < MAX_TICKETS) { String ticketNo = "Ticket" + (count + 1); int seatNo = count + 1; Ticket ticket = new Ticket(ticketNo, agentNo, seatNo); tickets.add(ticket); count++; System.out.println("代售" + agentNo + "售出了" + ticketNo); } } try { Thread.sleep(100); // 模拟代售售票的时间 } catch (InterruptedException e) { e.printStackTrace(); } } } // 省略getter方法 } public class Main { public static void main(String[] args) { TicketAgent agent1 = new TicketAgent(1); TicketAgent agent2 = new TicketAgent(2); TicketAgent agent3 = new TicketAgent(3); Thread thread1 = new Thread(agent1); Thread thread2 = new Thread(agent2); Thread thread3 = new Thread(agent3); thread1.start(); thread2.start(); thread3.start(); } } ``` 以上是一个简单的铁路售票系统模拟程序,通过三个代售实现某日某次列车50票的发售。每个代售通过售票过程来创建并售出票,并将已售出的票添加到一个集合中,最多售票数为50。请适当调整代码以符合实际需求和约束。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值