Java多執行緒應用之火車站售票
阿新 • • 發佈:2019-01-07
在我們的現實生活中,去火車站買票是一件很平常的事,但是你們想過嗎,比如我們從一個售票處買了一張票的話,那麼其他的售票點就不能找到這張票了,這樣就可以保證每個人買的票不會一樣,這是通過java的多執行緒功能實現的,我今天寫的只是一個簡單版,真正的售票系統功能是更全面的並且不會出現漏洞。
實現程式碼如下:
第一個類 運用多執行緒實現買票 控制票的唯一
第二個類 : 執行模組public class TicketWindow implements Runnable{ private static int num=200; //共享變數(基本資料型別的資料),不能當物件鎖---因為它不是物件 private static Object obj=new Object();//可以新建一個與基本資料型別的共享變數平行的物件,來替代它當作鎖 private String name=null; public TicketWindow(String name){ this.name = name; } @Override public void run() { while(true){ synchronized (obj) {//※靜態變數的物件鎖是不能用this來代替的 if (num > 0) { System.out.println(name + ":" + num); num--; } else { break; } } } } }
public class TicketSale { public static void main(String[] args) { //開四個視窗(new執行緒),讓它們都開始賣票(啟動執行緒) Thread t1 = new Thread( new TicketWindow("視窗1") ); Thread t2 = new Thread( new TicketWindow("視窗2") ); Thread t3 = new Thread( new TicketWindow("視窗3") ); Thread t4 = new Thread( new TicketWindow("視窗4") ); t2.start(); t3.start(); t1.start(); t4.start(); } }