Java多執行緒-46-用實現runnable的方式實現火車票賣票
阿新 • • 發佈:2018-11-08
前面一篇,我們介紹了火車票賣票多執行緒的實現和安全問題,實現方式是寫一個類來繼承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,當然寫位元組碼物件也沒問題。