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 张票
票已售完,请下次再来!