- else
- {
- while (true)
- {
- if (fucSyn)
- sale();
- else
- break;
- }
- }
复制代码 问题在你地20,21这几行代码中。
在第二个窗口有两个线程卖票,设为A和B。
假如A线程执行到 if (fucSyn) 判断之前,而此时票已经卖完,并且B线程已经fucSyn=false语句,
那么A线程继续执行判断fucSyn为false则跳到 else 执行break语句,这样A线程就没有再次进入
sale()中而没能打印出“售票结束”。
当然这种情况很少出现,但却是存在漏洞。
你可以System.out.println(Thread.currentThread().getName()+"售票结束");放在break语句前面,
注意这两条语句要被大括号括起来。这样就可以避免上述情况。
|