java创建多线程对象模拟多个用户购票(输入用户名和购票数出票)

java创建多线程对象模拟多个用户购票(输入用户名和购票数出票)

TrainStation类(用户输入名字和要购买的票数)

public class TrainStation {
    //用户姓名
	private String name;
    //购票数
	private int ticket;
	public TrainStation() {
		super();
	}
	public TrainStation(String name,int tic) {
		super();
		this.name = name;
		this.ticket=tic;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getTicket() {
		return ticket;
	}
	public void setTicket(int ticket) {
		this.ticket = ticket;
	}
}

TrainStationThread线程类

/*
*继承Thread方法,实现Runnable接口更好
*/
public class TrainStationThread extends Thread{
    //将用户TrainStation类作为属性
	private TrainStation ts;
    //总票数为100
	public static int tickets=100;
	
	public static int getTickets() {
		return tickets;
	}

	public static void setTickets(int tickets) {
		TrainStationThread.tickets = tickets;
	}

	public TrainStationThread() {
		super();
	}

	public TrainStationThread(TrainStation ts) {
		super();
		this.ts = ts;
	}

	public void run() {
		synchronized(String.class) {//锁住每个字符串,共享的String字节码文件
			if(tickets<=0) {
				System.out.println("车票已卖完!!!");
				return;
			}
			int after=tickets-ts.getTicket();
			System.out.println(ts.getName()+"成功购买"+ts.getTicket()+"张票,"+"剩余票数为:"+after);
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				// TODO 自动生成的 catch 块
				e.printStackTrace();
			}
			this.setTickets(after);
		}
		
	}
}

测试类

public class TrainStationTest {
	
	public static void main(String[] args) {
		// TODO 自动生成的方法存根
        //创建多个用户对象
		TrainStation s1=new TrainStation("张三",2);
		TrainStation s2=new TrainStation("李四",3);
		TrainStation s3=new TrainStation("王五",1);
		TrainStation s4=new TrainStation("赵六",1);
		TrainStation s5=new TrainStation("王麻子",1);
        //将对象加入到线程中;多态
		Thread t1=new TrainStationThread(s1);
		Thread t2=new TrainStationThread(s2);
		Thread t3=new TrainStationThread(s3);
		Thread t4=new TrainStationThread(s4);
		Thread t5=new TrainStationThread(s5);
        //线程启动
		t1.start();
		t2.start();
		t3.start();
		t4.start();
		t5.start();
	}

}

运行结果:

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我了解了你的问题。接下来,我会给你介绍一下如何使用多线程模拟网络购票,同时限制黄牛只能购买一张。 首先,我们可以使用Python的多线程库`threading`来实现多线程。假设有100个人要购买,我们可以创建100个线程,每个线程代表一个人购买一张。同时,我们需要使用一个共享变量来记录已经售出的数,以及一个锁来保证线程安全。 以下是一个简单的代码示例: ```python import threading # 初始化共享变量和锁 tickets_sold = 0 lock = threading.Lock() # 定义一个售函数 def sell_ticket(): global tickets_sold with lock: # 使用锁保证线程安全 if tickets_sold < 1: # 黄牛只能买一张 tickets_sold += 1 print("成功购买一张!") else: print("已经售罄!") # 创建100个线程并启动 for i in range(100): t = threading.Thread(target=sell_ticket) t.start() ``` 在上面的代码中,我们定义了一个`sell_ticket()`函数来模拟过程。每个线程都会调用这个函数,尝试购买一张。如果还有,就售出一张,并打印出成功购买的信息。如果已经售罄,就打印出已经售罄的信息。 同时,我们使用了一个`lock`来保证线程安全。每次修改共享变量`tickets_sold`时,都需要先获取锁,以防止多个线程同时修改这个变量而导致数据错误。 最后,我们创建了100个线程,并启动它们来模拟100个人购买的过程。当黄牛尝试购买第二张时,由于已经售罄,就无法购买。 希望这个示例可以帮助你理解如何使用多线程模拟网络购票,同时限制黄牛只能购买一张。如果你还有其他问题,请随时问我。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值