1. 程式人生 > >Java多執行緒實現電影院售票案例

Java多執行緒實現電影院售票案例

某電影院目前正在上映賀歲大片,共有100張票,而它有3個售票視窗,請設計一個程式模擬該電影院售票。

定義Sell類實現Runnable介面,很好的解決了單繼承共享資源問題

public class Sell implements Runnable {
	// 定義100張票,三個售票視窗售賣
	private int tickets = 100;
	Object obj = new Object();	

	@Override		//重寫run方法
	public void run() {
		while (true) {
			synchronized (obj) { // synchronized(物件) 執行緒同步機制,解決了重複搶佔現象
				if (tickets > 0) {
					try {
						Thread.sleep(100); // sleep();休眠100毫秒
					} catch (InterruptedException e) {	//丟擲異常

						e.printStackTrace();
					}
					System.out.println(Thread.currentThread().getName() + "正在出售第: " + (tickets--) + " 張票");
				}
			}
		}
	}
}

public class SellDemo {
	public static void main(String[] args) {
		Sell s = new Sell();
		//三個售票口
		Thread t1 = new Thread(s, "視窗1");
		Thread t2 = new Thread(s, "視窗2");
		Thread t3 = new Thread(s, "視窗3");
		//啟動執行緒
		t1.start();
		t2.start();
		t3.start();
	}
}