package Thread; /** * * 三個售票窗口同時出售20張票 *程序分析:1.票數要使用同一個靜態值 *2.為保證不會出現賣出同一個票數,要java多線程同步鎖。 *設計思路:1.創建一個站台類Station,繼承Thread,重寫run方法, *在run方法里面執行售票操作!售票要使用同步鎖:即有一個站台賣這張票時,其他站台要等這張票賣完! *3.創建主方法調用類 */ public class Station1 extends Thread{ //通過構造方法給線程名字賦值 public Station1(String name){ super(name);//給線程名字賦值 } //為了保持票數的一致,票數要靜態 static int tick = 20; //創建一個靜態鑰匙 static Object ob = "aa";//值是任意的 //重寫run方法 實現買票操作 public void run(){ while(tick>0){ synchronized(ob){ /** * 這個很重要, 必須使用一個鎖 * 進去的人會把鑰匙拿在手上 出來才把鑰匙拿出來 */ if(tick>0){ System.out.println(getName()+"賣了第"+tick+"張票"); tick--; }else{ System.out.println("票賣完了"); } } try { sleep(1000);//休息一秒 } catch (Exception e) { e.printStackTrace(); } } } } package Thread; public class MainClass1 { /** * java 多線程同步鎖的使用 * 示例 三個售票窗口同時出售10張票 */ public static void main(String[] args) { //實例化站台對象 並為每一個站台取名字 Station1 station1 = new Station1("窗口1"); Station1 station2 = new Station1("窗口2"); Station1 station3 = new Station1("窗口3"); //讓每一個站台對象各自開始工作 station1.start(); station2.start(); station3.start(); } }