6.18Java多執行緒同步方法實現DemoNo2
阿新 • • 發佈:2021-06-18
使用同步方法重寫購票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;
return