本帖最后由 应广驰 于 2012-8-25 20:24 编辑
- package ygc;
- class Demo implements Runnable
- {
- private static int piao = 10;
- private String name;
- Demo(String name)
- {
- this.name = name;
- }
-
- public String getName()
- {
- return name;
- }
- Object obj = new Object();
-
- public void run()
- {
-
- synchronized(obj)
- {
- while(piao>0)
- {
- System.out.println(this.getName()+"卖出"+(10-(--piao))+"号票"+"还有"+(piao)+"张票");
- }
- }
-
- }
- }
- class Test
- {
-
- public static void main(String[] arges)
- {
-
- Demo d1 = new Demo("一号窗口");
- new Thread(d1).start();
- Demo d2 = new Demo("二号窗口");
- new Thread(d2).start();
- Demo d3 = new Demo("三号窗口");
- new Thread(d3).start();
- Demo d4 = new Demo("四号窗口");
- new Thread(d4).start();
- }
- }
复制代码 其中一次输出结果
一号窗口卖出1号票还有9张票
一号窗口卖出2号票还有8张票
一号窗口卖出4号票还有6张票
一号窗口卖出5号票还有5张票
一号窗口卖出6号票还有4张票
一号窗口卖出7号票还有3张票
一号窗口卖出8号票还有2张票
一号窗口卖出9号票还有1张票
一号窗口卖出10号票还有0张票
二号窗口卖出3号票还有7张票
有了synchronized(obj)不是其他线程都进不来了么,要等语句执行完才可以进来,那为什么最后一次输出的却是3和7呢。d2线程应该拿到线程执行权后就会执行然后输出了吧,怎么会在最后d1线程执行完后在输出呢。是因为双核CPU的问题吗?
|