1. 程式人生 > >Java多執行緒應用之火車站售票

Java多執行緒應用之火車站售票

 在我們的現實生活中,去火車站買票是一件很平常的事,但是你們想過嗎,比如我們從一個售票處買了一張票的話,那麼其他的售票點就不能找到這張票了,這樣就可以保證每個人買的票不會一樣,這是通過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();
	}
}