有100张票,用五个线程模拟五个窗口售票。
public class GouPiaoTest {
public static void main(String[] args) {
Piao piao=new Piao();
Thread thread1=new Thread(piao,"窗口1");
Thread thread2=new Thread(piao,"窗口2");
Thread thread3=new Thread(piao,"窗口3");
Thread thread4=new Thread(piao,"窗口4");
Thread thread5=new Thread(piao,"窗口5");
thread1.start();
thread2.start();
thread3.start();
thread4.start();
thread5.start();
}
}
class Piao implements Runnable{
int num=100;
public Piao(){}
public void run () {
while(true)
{
//加锁防止出现并发错误(两个窗口买同一张票)
synchronized (this) {
try{
Thread.sleep(10);
}catch(InterruptedException e){
e.printStackTrace();
}
if (num > 0) {
System.out.println(Thread.currentThread().getName() + "售出一张票,还剩" + --num + "张票");
} else {
System.out.println(Thread.currentThread().getName() + "票已售完");
break;
}
}
}
//让线程暂停一秒,以免只有一个线程一直售票
try{
Thread.sleep(1000);
}catch(InterruptedException e){
e.printStackTrace();
}
}
}
运行结果: