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();
}
}
运行结果: