本帖最后由 zq19910303 于 2015-5-19 06:38 编辑
为什么这个卖票代码每次运行都会出现四个100-----------问这个问题的目的是为了分析代码错在了哪里,为什么会错
- /*需求:四个窗口卖100张票*/
- class Ticket extends Thread
- {
-
- private static int t=100;
- public void run()
- {
- while (t>0)
- {
- System.out.println(Thread.currentThread().getName()+"----------sale:"+t);
- t--;
- }
- }
- }
- class TicketDemo
- {
- public static void main(String[] args)
- {
- Ticket t1=new Ticket();
- Ticket t2=new Ticket();
- Ticket t3=new Ticket();
- Ticket t4=new Ticket();
- t1.start();
- t2.start();
- t3.start();
- t4.start();
- }
- }
复制代码
这是因为第十行和第十一行代码的原因,与cpu核心数量无关,如果cpu在执行完t1的第十行后就去执行t2了,那么就会出现两个一百了,同理就能分析出四个一百的原因,而且其他的数字也有可能出现多次,这是代码的不严谨导致的。将十与十一合并后就会解决这个问题。当合并后出现两次相同的数字,那就是因为cpu是双核的原因了。
|
|