Java多线程编程,模拟售票

本文探讨了一个票务系统的实现,包括票数管理、并发购票处理及异常情况的处理。通过模拟购票流程,展示了如何在Java中使用同步机制确保票数的正确性和并发操作的有序性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package ticktester;
02class Ticket{
03    private int ticketCount;
04     
05    public Ticket(int ticketCount){
06        this.ticketCount = ticketCount;
07    }
08     
09    public synchronized void withBuyTicket(int amount){
10        int currentTicketAmount = ticketCount;
11         
12        System.out.println("\n目前票数:"+currentTicketAmount);
13        if(currentTicketAmount==0)
14        {
15            System.out.println("票已全部售出!");
16            return;
17        }
18        if(amount>currentTicketAmount)
19        {
20            System.out.println("需售出票数: "+amount+" 剩下票数为: "+currentTicketAmount+" 剩余票数不足 !");
21        }
22        else   
23        {
24            currentTicketAmount = currentTicketAmount-amount;
25            System.out.println("售出票数:"+amount+" 剩余票数: "+currentTicketAmount);
26            ticketCount = currentTicketAmount;
27        }
28    }
29}
30 
31class BuyTicket implements Runnable{
32    private Ticket t;
33    private int amount;
34     
35    public BuyTicket(Ticket t,int amount){
36        this.t = t;
37        this.amount = amount;
38    }
39     
40    public void run(){
41        try {
42            Thread.sleep(((int)(Math.random()*10000)));
43    } catch (InterruptedException e) {
44            e.printStackTrace();
45    }
46        t.withBuyTicket(amount);
47    }
48}
49 
50public class TickTester {
51 
52    /**
53     * @param args
54     */
55    public static void main(String[] args) {
56        // TODO Auto-generated method stub
57        Ticket t = new Ticket(10);
58        BuyTicket a1 = new BuyTicket(t,2);
59        BuyTicket a2 = new BuyTicket(t,2);
60        BuyTicket a3 = new BuyTicket(t,1);
61        BuyTicket a4 = new BuyTicket(t,1);
62        BuyTicket a5 = new BuyTicket(t,2);
63        BuyTicket a6 = new BuyTicket(t,3);
64        Thread tk1 = new Thread(a1);
65        Thread tk2 = new Thread(a2);
66        Thread tk3 = new Thread(a3);
67        Thread tk4 = new Thread(a4);
68        Thread tk5 = new Thread(a5);
69        Thread tk6 = new Thread(a6);
70        tk1.start();
71        tk2.start();
72        tk3.start();
73        tk4.start();
74        tk5.start();
75        tk6.start();
76    }
77}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值