import java.util.Random;
public class Tickets implements Runnable{
private int num=20;//假设余票数量为20
Object lock=new Object();
@Override
//卖票
public void run() {
Random ra=new Random();
while(true){
//让每个线程都有机会抢到,线程休息,其他线程抢夺资源
try {
int n=ra.nextInt(6)*100;//随机0-500毫秒
Thread.sleep(n);
//lock.wait(n);
} catch (InterruptedException e) {
e.printStackTrace();
}
/**
* 那个线程抢到了资源,就加锁,其他线程只能等待;
* 当前线程执行完毕,释放资源,所有线程重新抢夺资源的控制权;
*
*/
synchronized (lock){
if(num>0){
//发现有余票模拟出票,使用sleep随即等待
//卖票
//获得线程名
String name=Thread.currentThread().getName();//获得线程名
System.out.println(name+"卖出第"+num+"号票");
num--;//卖完后让余票数量-1
}else{
System.out.println("已经没票了");
break;
}
}
}
}
}
测试类:
public class Test01 {
public static void main(String[] args) {
//
Tickets tickets=new Tickets();
//
Thread t1=new Thread(tickets,"郑州东站");
Thread t2=new Thread(tickets,"郑州西站");
Thread t3=new Thread(tickets,"郑州南站");
Thread t4=new Thread(tickets,"郑州北站");
t1.start();
t2.start();
t3.start();
t4.start();
}
}
显示为: