使用同步方法重写购票demo
package iostudy.synchro;
/**
* 模拟买火车票
*/
public class Happy12306 {
public static void main(String[] args) {
/*实例化资源类*/
Web12306 web12306 = new Web12306(4, "Happy!");
/*实例化代理对象*/
new Passenger(2, web12306, "Jun").start();
new Passenger(1, web12306, "Harden").start();
}
}
/**
* 创建乘客资源类
*/
class Passenger extends Thread{
/*设置资源*/
int seats;
public Passenger(int seats, Runnable target, String name){
super(target, name);
this.seats = seats;
}
}
/**
* 另一个资源类
*/
class Web12306 implements Runnable{
/*设置资源*/
int available;
String name;
/*构造器*/
public Web12306(int available, String name){
this.available = available;
this.name = name;
}
/**
* 重写run方法,思考如何获得参数
*/
public void run(){
/*通过强制转型的方法拿到seats的值*/
Passenger p = (Passenger) Thread.currentThread();
boolean flag = this.bookTickets(p.seats);
if (flag){
System.out.println("出票成功!" + Thread.currentThread().getName()
+ "位置为" + p.seats);
}else {
System.out.println("出票失败" + Thread.currentThread().getName()
+ "位置不够!!");
}
}
/**
* 购买方法
*/
public synchronized boolean bookTickets(int seats){
System.out.println("可用位置为:" + available);
if (seats>available){
return false;
}
available -= seats;