本帖最后由 2528870651 于 2014-4-4 18:46 编辑
- <div class="blockcode"><blockquote>class Ticket implements Runnable
- {
- Object obj = new Object();
- private int ticket=20;
- public Ticket()
- {
-
- }
- public void run()
- {
- while (ticket>0)
- {
- try
- {
- Thread.sleep(100);
- }
- catch (InterruptedException e)
- {
- e.printStackTrace();
- }
-
- if (ticket>0)
- System.out.println(Thread.currentThread().getName()+"卖出第"+(ticket--)+"张门票。。。"+ticket);
- //搞不懂为什么会出现2张相同的票,所以实验一下,可是后面的ticket怎么和(ticket--)相同呢?
- //按照我的理解ticket-- 应该在执行到(ticket-- )的后面就减1了,可是下面的结果在打印
- //2张相同票的时候,后面打印的ticket没有减1。为什么呢?
- //另外分析一下2张相同票是怎么出现的。
- //我不是问没有加锁会有什么问题,而是想问为什么前后2个ticket会相同, 前面的ticket--了啊 ,后面的ticket应该是-1的啊
- }
- }
- }
- public class TicketDemo
- {
- public static void main(String[] args)
- {
- Ticket window = new Ticket();
- Thread t1 = new Thread(window, "第一个窗口");
- Thread t2 = new Thread(window, "第二个窗口");
- t1.start();
- t2.start();
- }
- }
- /*
- 其中一个结果是:
- 第一个窗口卖出第19张门票。。。18 //就是这里,为什么第19,20张票后面打印的都是18呢
- 第二个窗口卖出第20张门票。。。18
- 第一个窗口卖出第18张门票。。。17
- 第二个窗口卖出第17张门票。。。16
- 第二个窗口卖出第16张门票。。。15
- 第一个窗口卖出第15张门票。。。14
- 第一个窗口卖出第14张门票。。。12
- 第二个窗口卖出第13张门票。。。12
- 第二个窗口卖出第12张门票。。。10
- 第一个窗口卖出第11张门票。。。10
- 第二个窗口卖出第10张门票。。。9
- 第一个窗口卖出第9张门票。。。8
- 第一个窗口卖出第8张门票。。。7 //这里2张相同票后面打印的都是7
- 第二个窗口卖出第8张门票。。。7
- 第二个窗口卖出第6张门票。。。5
- 第一个窗口卖出第7张门票。。。5
- 第二个窗口卖出第4张门票。。。3
- 第一个窗口卖出第5张门票。。。3
- 第二个窗口卖出第3张门票。。。2
- 第一个窗口卖出第3张门票。。。2
- 第一个窗口卖出第2张门票。。。0
- 第二个窗口卖出第1张门票。。。0
- */
复制代码
|
|