多个线程同时抢票
public class TestDemo{
@Test
public void test9() throws Exception {
CountDownLatch count = new CountDownLatch(1);
for (int i = 0; i < 5; i++) {
new Thread(new MyThread(count)).start();
}
count.countDown();
}
class MyThread implements Runnable {
private CountDownLatch count;
MyThread(CountDownLatch count) {
this.count = count;
}
@Override
public void run() {
try {
count.await();
SellTicjets.sell();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
static class SellTicjets{
public static int ticketTotal = 10;
static Object obj =new Object();
public static void sell(){
while (ticketTotal> 0){
synchronized (obj){
if(ticketTotal>0){
ticketTotal--;
System.out.println("线程" + Thread.currentThread().getName() + "售出一张票,当前剩余票数:" + ticketTotal);
}
}
}
}
}
}
输出结果:
使用CountDownLatch模拟并发,挺好使的,个人很喜欢