import java.util.ArrayList;
import java.util.List;
/**
*使用同步方法购票
**/
public class Happy12306 {
public static void main(String[] args) {
web12306 web = new web12306(3, "12306");
new Passenger(web, "老高", 2).start();
new Passenger(web, "老王", 2).start();
}
}
//继承Thread为web12306作代理,好处是可以添加线程变量 例如:seat
class Passenger extends Thread{
public int seat;
public Passenger(Runnable target, String name, int seat) {
super(target, name);
this.seat = seat;
}
}
class web12306 implements Runnable{
private int avilable; //显示可用的位置
private String name;//名称
public web12306(int avilable, String name) {
this.avilable = avilable;
this.name = name;
}
@Override
public void run() {
Passenger p = (Passenger) Thread.currentThread();
boolean flag = this.bookTicket(p.seat);
if(flag == false){
System.out.println("出票失败" + Thread.currentThread().getName() + "位置不够" );
}else{
System.out.println("出票成功" + Thread.currentThread().getName() + "出票" + p.seat);
}
}
//购票,同步方法
public synchronized boolean bookTicket(int seat){
System.out.println("当前可用的票数为:" + avilable );
if(seat > avilable)
return false;
//如果成功,则赋值
avilable -= seat;
return true;
}
}
运行结果:
当前可用的位置为:3
当前可用的位置为:1
出票失败老王位置不够
出票成功老高出票2