1. 程式人生 > >Java多執行緒-46-用實現runnable的方式實現火車票賣票

Java多執行緒-46-用實現runnable的方式實現火車票賣票

前面一篇,我們介紹了火車票賣票多執行緒的實現和安全問題,實現方式是寫一個類來繼承Thread類。前面我們介紹了實現多執行緒有兩種方式,第一種是作為Thread類的子類,第二種是實現Runnable,這篇就來寫一個實現Runnable的賣火車票的程式碼。

package thread;

public class Demo4_Ticket {

	public static void main(String[] args) {
		MyTicket mt = new MyTicket();
		new Thread(mt).start();
		new Thread(mt).start();
		new Thread(mt).start();
		new Thread(mt).start();
	}

}

class MyTicket implements Runnable {
	private int tickets = 100;
	
	@Override
	public void run() {
		while(true){
			synchronized(this) {
				if(tickets <= 0){
					break;
				}
				try {
					Thread.sleep(10);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				System.out.println(Thread.currentThread().getName() + "...這是第" + tickets-- + "號票");
			}
		}
		
	}
	
}

這個程式碼和前面差不多,修改了幾處。第一這個tickets成員變數不需要加static修飾,因為我們只建立了一個MyTicket物件,四個執行緒共享一個my物件。所以這個地方同步鎖可以寫this,當然寫位元組碼物件也沒問題。