多執行緒程式設計:三個售票視窗同時賣出20張票
阿新 • • 發佈:2018-12-16
分析:
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張票
票賣完了