package demo; import java.util.Random; /** * * * @author Weirdo-world * * java 實現多執行緒程式 * 1)繼承Thread類 * 2)實現Runnble介面 * * 通過多執行緒模擬售票視窗 * 各售票視窗不能售出同一張票 * 列印售出的票號 */ public class Demo5 { public static void main(String[] args) { Demo55 d = new Demo55(); Thread t1 = new Thread(d); t1.setName("一號售票視窗:"); Thread t2 = new Thread(d); t2.setName("二號售票視窗:"); Thread t3 = new Thread(d); t3.setName("三號售票視窗:"); Thread t4 = new Thread(d); t4.setName("四號售票視窗:"); Thread t5 = new Thread(d); t5.setName("五號售票視窗:"); t1.start(); t2.start(); t3.start(); t4.start(); t5.start(); } } class Demo55 implements Runnable { public int ticket = 20; public int num = 0; @Override public void run() { while (ticket > 0) { synchronized (this) { // 同步鎖:一個時間內只允許一個執行緒,另一個必須等待當前執行緒結束後再執行。(this指的是一個物件) if (ticket > 0) { try { Thread.sleep(new Random().nextInt(1000)); // 休眠時間 } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } ticket--; num++; System.out.println(Thread.currentThread().getName() + "當前票號:" + num); } } } } }