线程练习抢票

1.3个黄牛抢票

2.黄牛(中介)从窗口买票,不用我们自己去买,静态代理模式

230813_gEpA_3716995.png

第一个包orj.jsoft.proxy是静态代理模式,orj.jsoft.ticket是3个黄牛抢票

1.

package org.jsoft.ticket;

public class Ticket implements Runnable {
     
    private int num = 0; // 出票数
    private int num1 = 50; // 剩余票数
    boolean flag = false;
    @Override
    public void run() {
        while (true) {
            synchronized (this) {//同步所有线程
                if (num1 <= 0) {//当剩余票数为0时,跳出循环
                    break;
                }
                num++;//出票数依次增加
                num1--;//剩余票数依次减少
                try {
                    Thread.sleep(500);// 网络延时0.5s
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                System.out.println("抢票结果:"+Thread.currentThread().getName()+"抢到第"+num+"张票,剩余"+num1+"张票");
            }
        }
    }
}

package org.jsoft.ticket;

public class TextTicket {
        public static void main(String[] args) {
            Ticket ticket=new Ticket();
            //  实例化几个抢票黄牛
            Thread h1 = new Thread(ticket, "黄牛1");
            Thread h2 = new Thread(ticket, "黄牛2");
            Thread h3 = new Thread(ticket, "黄牛3");
            h1.start();
            h2.start();
            h3.start();
        }
    }
运行结果如下

230729_kpNK_3716995.png

2.

package org.jsoft.proxy;
//个人和中介代理共同的方法,接口
public interface IProxy {
    void buyTicket();
}

package org.jsoft.proxy;

public class Proxy implements IProxy{
    //声明一个IProxy接口
    private IProxy p;
    //两个构造方法
    public Proxy(){}
    public Proxy(IProxy p){
        this.p=p;
    }
    @Override
    public void buyTicket() {
        // TODO Auto-generated method stub
        p.buyTicket();
        over();
    }
    public void over(){
        System.out.println("买到票了!");
    }
}
 

package org.jsoft.proxy;

public class User implements IProxy{

    private String cardNum;
    private String name;
    private String homeAddress;
    private String sex;

    public String getCardNum() {
        return cardNum;
    }

    public void setcardNum(String cardNum) {
        this.cardNum = cardNum;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getHomeAddress() {
        return homeAddress;
    }

    public void setHomeAddress(String homeAddress) {
        this.homeAddress = homeAddress;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }
    @Override
    public void buyTicket() {
        // TODO Auto-generated method stub
        System.out.println("**********我要买票**********");
        User u=new User();
        u.setName("罗维璠");
        u.setSex("女");
        u.setHomeAddress("长春市");
        u.setcardNum("220622199707100025");
        System.out.println("姓名:"+u.getName());
        System.out.println("性别:"+u.getSex());
        System.out.println("住址:"+u.getHomeAddress());
        System.out.println("身份证号:"+u.getCardNum());

    }

}

测试类

package org.jsoft.proxy;

public class TextTicket {
public static void main(String[] args) {
    User u=new User();
    Proxy p=new Proxy(u);
    p.buyTicket();
}
}

运行结果如下

231158_54LO_3716995.png

转载于:https://my.oschina.net/u/3716995/blog/1787760

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值