java多线程售票简单的Java代码

多线程售票

这是一个多线程安全的代码

/*
 * Copyright (c) 2021, 2023, xwdfl.cn All rights reserved.
 *
 */
package cn.xwdfl;

/**
 * <p>Project: untitled - Test1</p >
 * <p>Powered by xwdfl On 2023-07-26 </p >
 * <p>描述:多线程售票简单代码<p>
 *
 * @author xwdfl [2631645761@qq.com]
 * @version 1.0
 * @since 17
 */
public class Test1 {
    private int num=50;//默认初始票为50张
    public Test1() {
    }
    public Test1(int num) {
        this.num = num;
    }
    public int getNum() {
        return num;
    }
    public void setNum(int num) {
        this.num = num;
    }
    public static void main(String[] args) {
        var t=new Test1(10);//输入要售卖票的总数,不输入为默认50张票
        var t1=new Thread(t::worker,"th1");
        var t2=new Thread(t::worker,"th2");
        var t3=new Thread(t::worker,"th3");
        var t4=new Thread(t::worker,"th4");
        t1.start();
        t2.start();
        t3.start();
        t4.start();
    }
    void worker(){
        String t = Thread.currentThread().getName();
        System.out.printf("%s:线程启动..%n", t);
        while (true) {
            synchronized (this){
                if (num<1)break;
                System.out.printf("%s:售出一张票(座号%d),剩余%d张票%n",t,num,--num);
                try {
                    //Thread.sleep(500);//休眠500毫秒
                    TimeUnit.SECONDS.sleep(1);//休眠1秒
                }catch (Exception e){
                    e.printStackTrace();
                }
            }
        }
        System.out.println("线程结束");
    }

}

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值