import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class ThreadTicket {
public static void main(String[] args) {
Booking b1 = new Booking("军人售票口");
Booking b2 = new Booking("学生售票口");
Booking b3 = new Booking("老年人售票口");
Booking b4 = new Booking("网上售票口");
b1.start();
b2.start();
b3.start();
b4.start();
}
}
/*
* 多窗口卖票系统。多线程
* 票数为静态的,共享数据
* synchronized(对象){}代码块中的内容是加锁的,
* 即当一个线程在使用时,其他线程不可以进入。
* 使得共享资源数据的安全。
*/
class Booking extends Thread{
public Booking(String name){
super(name);
}
static int ticket = 50;//票数共50张
Lock lock = new ReentrantLock();//明锁
/*
* Lock是个接口,只能实例化它的子类
* 明锁适合高并发,上万
* 暗锁适合并发率不高时,效率高
*/
//重写run方法,
public void run(){
while(ticket>0){
synchronized (Booking.class) {
if (ticket>0) {
System.out.println(super.getName()+"窗口---->卖出的车票号No."+ticket);
ticket--;
}else {
System.out.println(super.getName()+"票已售罄!!!");
}
try {
sleep(100);//睡100毫秒,抛出多线程异常
} catch (InterruptedException e) {
e.printStackTrace();
}
}
/*lock.lock();//加锁,锁定以下代码
if (ticket>0) {
System.out.println(super.getName()+"卖票:"+ticket);
ticket--;
}else {
System.out.println(super.getName()+"票已售罄!!!");
}
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
lock.unlock();//解锁
*/ }
}
}
运行结果如下:
军人售票口窗口---->卖出的车票号No.50
网上售票口窗口---->卖出的车票号No.49
老年人售票口窗口---->卖出的车票号No.48
学生售票口窗口---->卖出的车票号No.47
老年人售票口窗口---->卖出的车票号No.46
网上售票口窗口---->卖出的车票号No.45
网上售票口窗口---->卖出的车票号No.44
军人售票口窗口---->卖出的车票号No.43
网上售票口窗口---->卖出的车票号No.42
老年人售票口窗口---->卖出的车票号No.41
老年人售票口窗口---->卖出的车票号No.40
老年人售票口窗口---->卖出的车票号No.39
学生售票口窗口---->卖出的车票号No.38
老年人售票口窗口---->卖出的车票号No.37
网上售票口窗口---->卖出的车票号No.36
军人售票口窗口---->卖出的车票号No.35
网上售票口窗口---->卖出的车票号No.34
老年人售票口窗口---->卖出的车票号No.33
老年人售票口窗口---->卖出的车票号No.32
学生售票口窗口---->卖出的车票号No.31
老年人售票口窗口---->卖出的车票号No.30
网上售票口窗口---->卖出的车票号No.29
军人售票口窗口---->卖出的车票号No.28
网上售票口窗口---->卖出的车票号No.27
网上售票口窗口---->卖出的车票号No.26
网上售票口窗口---->卖出的车票号No.25
老年人售票口窗口---->卖出的车票号No.24
老年人售票口窗口---->卖出的车票号No.23
老年人售票口窗口---->卖出的车票号No.22
学生售票口窗口---->卖出的车票号No.21
老年人售票口窗口---->卖出的车票号No.20
网上售票口窗口---->卖出的车票号No.19
军人售票口窗口---->卖出的车票号No.18
网上售票口窗口---->卖出的车票号No.17
网上售票口窗口---->卖出的车票号No.16
老年人售票口窗口---->卖出的车票号No.15
老年人售票口窗口---->卖出的车票号No.14
学生售票口窗口---->卖出的车票号No.13
老年人售票口窗口---->卖出的车票号No.12
网上售票口窗口---->卖出的车票号No.11
军人售票口窗口---->卖出的车票号No.10
网上售票口窗口---->卖出的车票号No.9
老年人售票口窗口---->卖出的车票号No.8
学生售票口窗口---->卖出的车票号No.7
学生售票口窗口---->卖出的车票号No.6
学生售票口窗口---->卖出的车票号No.5
老年人售票口窗口---->卖出的车票号No.4
网上售票口窗口---->卖出的车票号No.3
军人售票口窗口---->卖出的车票号No.2
军人售票口窗口---->卖出的车票号No.1
网上售票口票已售罄!!!
老年人售票口票已售罄!!!
学生售票口票已售罄!!!