1. 程式人生 > >多執行緒程式設計:三個售票視窗同時賣出20張票

多執行緒程式設計:三個售票視窗同時賣出20張票

分析:

1)票數要使用一個靜態值,才能所有視窗共享(執行緒)

2)要使用執行緒同步鎖,才不會有多個視窗同時賣出一張票

程式碼:

package ThreadTest;
/*
 * 多個視窗同時賣出20張票
 */
public class Station extends Thread{
	public Station(String name) {
		super(name);
	}
	
	static int tickers=1;
	static Object ob="aa";//指定一個共用物件
	
	//重寫run操作,實現賣票
	@Override
	public void run() {
		// TODO Auto-generated method stub
		super.run();
		while(tickers<=20){
			synchronized (ob) {
				if(tickers<=20){
					System.out.println(getName()+":賣出了第"+tickers+"張票");
					tickers++;
				}else{
					System.out.println("票賣完了");
				}
			}
			try {
				sleep(10);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	
	public static void main(String[] args) {
		Station station1=new Station("視窗一");
		Station station2=new Station("視窗二");
		Station station3=new Station("視窗三");
		station1.start();
		station2.start();
		station3.start();
	}

}

結果:

視窗一:賣出了第1張票
視窗三:賣出了第2張票
視窗二:賣出了第3張票
視窗三:賣出了第4張票
視窗二:賣出了第5張票
視窗一:賣出了第6張票
視窗二:賣出了第7張票
視窗一:賣出了第8張票
視窗三:賣出了第9張票
視窗二:賣出了第10張票
視窗一:賣出了第11張票
視窗三:賣出了第12張票
視窗一:賣出了第13張票
視窗二:賣出了第14張票
視窗三:賣出了第15張票
視窗三:賣出了第16張票
視窗二:賣出了第17張票
視窗一:賣出了第18張票
視窗一:賣出了第19張票
視窗二:賣出了第20張票
票賣完了