package com.ma.thread001;
/**
* 多線程模擬售票,多個窗口售票
* @author ma
*
*/
public class SellTicktDemo implements Runnable {
/*
* 需求:多線程模擬售票,多個窗口售票
*
* 分析:
* A.需要的類
* 1.建立一個多線程的類SellTicktDemo
* 2.創建一個測試類SellTicktDemoTest
* B.類的關系
* 1.多線程的類SellTicktDemo,實現Runnable接口,重寫run()方法
* 2.SellTicktDemoTest 測試多線程類
* C.實現多線程同步
* 1.用synchronized()方法實現線程同步
* D.在SellTicktDemoTest中實現多數窗口
*
*/
//定義票的總數
private int total = 100;
//定義票的編號
private int no = total+1;
//定義一個線程同步對象
private Object obj = new Object();
@Override
public void run() {
while(true){
//同步鎖
synchronized(this.obj){
if(this.total > 0){
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
String msg = Thread.currentThread().getName()+" 售出第 "+(this.no -this.total) +" 張票";
System.out.println(msg);
this.total--;
}else{
System.out.println("票已售完,請下次再來!");
System.exit(0);
}
}
}
}
}
package com.ma.thread001;
/**
* 測試類
* @author ma
*
*/
public class SellTicktDemoTest {
public static void main(String[] args) {
//得到對象
SellTicktDemo std = new SellTicktDemo();
//把對象放入線程中
Thread t1 = new Thread(std,"售票窗口1");
Thread t2 = new Thread(std,"售票窗口2");
Thread t3 = new Thread(std,"售票窗口3");
Thread t4 = new Thread(std,"售票窗口4");
t1.start();
t2.start();
t3.start();
t4.start();
}
}
輸出結果:
售票窗口1 售出第 1 張票
售票窗口4 售出第 2 張票
售票窗口4 售出第 3 張票
售票窗口4 售出第 4 張票
售票窗口3 售出第 5 張票
售票窗口3 售出第 6 張票
售票窗口3 售出第 7 張票
售票窗口3 售出第 8 張票
售票窗口3 售出第 9 張票
售票窗口3 售出第 10 張票
售票窗口3 售出第 11 張票
售票窗口3 售出第 12 張票
售票窗口3 售出第 13 張票
售票窗口3 售出第 14 張票
售票窗口3 售出第 15 張票
售票窗口3 售出第 16 張票
售票窗口3 售出第 17 張票
售票窗口3 售出第 18 張票
售票窗口2 售出第 19 張票
售票窗口3 售出第 20 張票
售票窗口3 售出第 21 張票
售票窗口3 售出第 22 張票
售票窗口4 售出第 23 張票
售票窗口1 售出第 24 張票
售票窗口4 售出第 25 張票
售票窗口4 售出第 26 張票
售票窗口4 售出第 27 張票
售票窗口4 售出第 28 張票
售票窗口4 售出第 29 張票
售票窗口3 售出第 30 張票
售票窗口2 售出第 31 張票
售票窗口2 售出第 32 張票
售票窗口2 售出第 33 張票
售票窗口2 售出第 34 張票
售票窗口3 售出第 35 張票
售票窗口3 售出第 36 張票
售票窗口4 售出第 37 張票
售票窗口1 售出第 38 張票
售票窗口1 售出第 39 張票
售票窗口1 售出第 40 張票
售票窗口4 售出第 41 張票
售票窗口4 售出第 42 張票
售票窗口3 售出第 43 張票
售票窗口3 售出第 44 張票
售票窗口3 售出第 45 張票
售票窗口3 售出第 46 張票
售票窗口3 售出第 47 張票
售票窗口3 售出第 48 張票
售票窗口2 售出第 49 張票
售票窗口2 售出第 50 張票
售票窗口3 售出第 51 張票
售票窗口3 售出第 52 張票
售票窗口4 售出第 53 張票
售票窗口1 售出第 54 張票
售票窗口1 售出第 55 張票
售票窗口4 售出第 56 張票
售票窗口4 售出第 57 張票
售票窗口3 售出第 58 張票
售票窗口3 售出第 59 張票
售票窗口3 售出第 60 張票
售票窗口3 售出第 61 張票
售票窗口3 售出第 62 張票
售票窗口2 售出第 63 張票
售票窗口2 售出第 64 張票
售票窗口2 售出第 65 張票
售票窗口2 售出第 66 張票
售票窗口2 售出第 67 張票
售票窗口2 售出第 68 張票
售票窗口3 售出第 69 張票
售票窗口3 售出第 70 張票
售票窗口3 售出第 71 張票
售票窗口3 售出第 72 張票
售票窗口3 售出第 73 張票
售票窗口4 售出第 74 張票
售票窗口1 售出第 75 張票
售票窗口1 售出第 76 張票
售票窗口1 售出第 77 張票
售票窗口1 售出第 78 張票
售票窗口1 售出第 79 張票
售票窗口1 售出第 80 張票
售票窗口1 售出第 81 張票
售票窗口1 售出第 82 張票
售票窗口4 售出第 83 張票
售票窗口4 售出第 84 張票
售票窗口4 售出第 85 張票
售票窗口4 售出第 86 張票
售票窗口3 售出第 87 張票
售票窗口3 售出第 88 張票
售票窗口3 售出第 89 張票
售票窗口2 售出第 90 張票
售票窗口3 售出第 91 張票
售票窗口3 售出第 92 張票
售票窗口3 售出第 93 張票
售票窗口3 售出第 94 張票
售票窗口3 售出第 95 張票
售票窗口4 售出第 96 張票
售票窗口1 售出第 97 張票
售票窗口1 售出第 98 張票
售票窗口4 售出第 99 張票
售票窗口4 售出第 100 張票
票已售完,請下次再來!
