package com.neutron.t21;
import java.util.ArrayList;
import java.util.List;
/**
* 有N张火车票,每张票都有1个编号,同时有10个窗口对外售票
*
* 分析下面程序可能存在哪些问题:重复售票,还是超量售票?
*/
public class Ticket1 {
static List<String> tickets = new ArrayList<>();
static {
for (int i = 0; i < 10000; i++) {
tickets.add("No:" + i);
}
}
/**
* remove不是同步方法,因此线程1发现size=1,那么将要进行remove
* 线程2也判断size=1,将要进行remove,那么就会超量卖票。
*
* a购买ticket1时,b也购买ticket1,所以就会重复卖票
*/
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
new Thread(() -> {
while (tickets.size() > 0) {
System.out.println("sell ticket:" + tickets.remove(0));
}
}).start();
}
}
}
thread29 - 卖票1
最新推荐文章于 2021-01-31 16:22:02 发布