題目:買火車(che)票
窗口搶票簡單實現
package com.gao.Project.Pro7;
public class BuyTicketThread extends Thread{
//有參構造器
public BuyTicketThread(String name){
super(name);//調用父類構造器傳名字
}
//一共10張票
static int ticketNum = 10; //多個對象共享10張票
//每個窗口都是一個線程對象:每個對象執行的代碼放入run方法中
@Override
public void run() {
//每個窗口后面都有100個人在搶票
for (int i = 1; i<=100; i++) {
if(ticketNum > 0){//對票數進行判斷
System.out.println("我在"+this.getName()+"買到了北京到哈爾濱的第"+ ticketNum-- +"張車票");
}
}
}
}
package com.gao.Project.Pro7;
public class Test {
public static void main(String[] args) {
//多個窗口搶票:三個窗口--->三個線程對象
BuyTicketThread t1 = new BuyTicketThread("窗口1");
t1.start();
BuyTicketThread t2 = new BuyTicketThread("窗口2");
t2.start();
BuyTicketThread t3 = new BuyTicketThread("窗口3");
t3.start();
}
}
多次(ci)運行會出(chu)現錯誤(wu)(wu)錯誤(wu)(wu):例如同一張票(piao)重復被購買(mai),出(chu)現0票(piao)負數票(piao)等(deng)問題
窗口搶票加強版
package com.gao.Project.Pro8;
public class BuyTicketThread implements Runnable {//實現Runnable接口
int ticketNum = 10;
@Override
public void run() {
for (int i = 1; i <100 ; i++) {
if (ticketNum>0){
System.out.println("我在窗口"+Thread.currentThread().getName()+ "買到了北京到哈爾濱的第"+ ticketNum-- +"張車票");
}
}
}
}
package com.gao.Project.Pro8;
import java.util.concurrent.TransferQueue;
public class Test {
public static void main(String[] args) {
//定義一個線程對象
BuyTicketThread bt = new BuyTicketThread();
//窗口1買票
Thread bt1 = new Thread(bt,"窗口1");
bt1.start();
//窗口2買票
Thread bt2 = new Thread(bt,"窗口2");
bt2.start();
//窗口3買票
Thread bt3 = new Thread(bt,"窗口3");
bt3.start();
}
}
