线程——售票问题

本文通过一个简单的售票问题展示了在多线程环境下可能出现的资源竞争和超卖现象。代码示例中,3个线程并发销售100张票,由于缺乏同步机制导致超卖。为解决此问题,可以采用线程同步技术,如使用`synchronized`关键字或者`java.util.concurrent`包下的工具类来确保同一时刻只有一个线程能进行售票操作,从而避免数据不一致。
摘要由CSDN通过智能技术生成

售票问题

共有 100 张票,创建 3 个线程同时售这 100 张票。

执行会出现 “ 超卖 ” 情况:即剩余票数为 负 的情况



package thread_;

/**
 * @Author: Gin
 * @Description:
 * @Modified By: Gin
 * @Date: Created in 9:16 2021/9/27
 */
public class Thread04 {
    public static void main(String[] args) {

//        SellTickets01 sellTickets1 = new SellTickets01();
//        SellTickets01 sellTickets2 = new SellTickets01();
//        SellTickets01 sellTickets3 = new SellTickets01();
//
//        sellTickets1.start();
//        sellTickets2.start();
//        sellTickets3.start();

        SellTickets02 sellTickets02 = new SellTickets02();

        new Thread(sellTickets02).start();
        new Thread(sellTickets02).start();
        new Thread(sellTickets02).start();

    }
}
class SellTickets01 extends Thread{

    private static int ticketsNum = 100;

    @Override
    public void run() {
        while(true){
            if(ticketsNum <= 0){
                System.out.println("售票结束...");
                break;
            }
            try {
                Thread.sleep(80);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("窗口 " + Thread.currentThread().getName() + " 售出一张票,剩余票数 " + (--ticketsNum));
        }
    }
}
class SellTickets02 implements Runnable{

    private int ticketsNum = 100;

    @Override
    public void run() {
        while (true){
            if(ticketsNum <= 0){
                System.out.println("售票结束...");
                break;
            }
            try {
                Thread.sleep(80);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("窗口 " + Thread.currentThread().getName() + " 售出一张票,剩余票数 " + (--ticketsNum));
        }
    }
}


在这里插入图片描述

通过线程同步机制解决以上 “ 超卖 ” 问题:
https://blog.csdn.net/qq_43575044/article/details/120509392

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值