实现火车票预售,必然会出现线程安全问题,开始用原子类AtomicInteger,后面觉得Lock也可以实现,用Lock 也是实现了下,在用Synchronized实现的时候,出现了下面的问题;
1.首先大家抢票,那我定义一个Integer类型的count 用来存放火车票数(从这里开始就已经为后面的代码埋下了雷啊!)
2.创建抢票线程类,在这个类的run方法中对count加锁,进行票减少操作(这里就是最大的隐患)
3.启动4个窗口,对火车票进行抢售
代码如下:
public class TikcetTestSync {
private volatile Integer count = 200;
@Test
public void test() throws InterruptedException {
TikcetRunnable tr = new TikcetRunnable();
Thread t1 = new Thread(tr, "窗口A");
Thread t2 = new Thread(tr, "窗口B");
Thread t3 = new Thread(tr, "窗口C");
Thread t4 = new Thread(tr, "窗口D");
t1.start();
t2.start();
t3.start();
t4.start();
Thread.currentThread().join();
}
public class TikcetRunnable implements Runnable {
@Override
public void run() {
while (count >