package cn.wlt.tickets;
/**
*
* @作者: CarryWang
* @描述: 买票窗口 100张票
*
*/
public class SaleTicket extends Thread{
private String name;
/**
* 100张票数共享的数据 属于类的属性
*/
private static int tickets=100;
//同步锁对象
private static Object obj=new Object();
public SaleTicket(String name) {
super(name);
this.name = name;
}
@Override
public void run() {
while(true){
/*
* 锁 synchronized (name) 这个name对象一定得是共享对象
* 同步代码块
*/
synchronized (obj) {
if(tickets>0){
try {
//线程休息10毫秒
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(this.getName()+"正在卖第"+tickets--+"张票");
}else{
System.out.println("票已经售完");
break;
}
}
}
}
}
测试代码:
package cn.wlt.tickets;
import org.junit.Test;
public class TicketTest {
public static void main(String[] args) {
SaleTicket st1=new SaleTicket("窗口1");
SaleTicket st2=new SaleTicket("窗口2");
SaleTicket st3=new SaleTicket("窗口3");
SaleTicket st4=new SaleTicket("窗口4");
st1.start();
st2.start();
st3.start();
st4.start();
}
}