日期:2014-05-20 浏览次数:20893 次
public class Demo extends Thread { public void run() { synchronized(this) { System.out.println(" "+Thread.currentThread().getName()); for (int i = 0; i < 10; i++) { System.out.print(i + " "); } System.out.println(); } } public static void main(String[] args) { Demo D1 = new Demo(); new Thread(D1).start(); new Thread(D1).start(); //Demo D2 = new Demo(); //D1.start(); //D2.start(); } }
------解决方案--------------------
楼上是对象锁,我贴一个类锁,直接按照你的demo改的
public class Demo extends Thread { public void run() { synchronized (Demo.class) { for (int i = 0; i < 10; i++) System.out.println(this.getName() + " " + i + " "); } } public static void main(String[] args) { Demo D1 = new Demo(); Demo D2 = new Demo(); D1.start(); D2.start(); } }
------解决方案--------------------
通俗点讲吧
1、你启动了两个线程,每个线程里面有一个for循环,出现轮流打印的原因是,cpu首先分配资源给了d1或d2,然后运行了一次输出,接着cup切换到了另个线程,又运行了一次输出,然后不断的切换
2、cpu分配时间是随即的,你把循环改大点,一定会出现各种结果,可能第一个线程循环了n次之后再切换给第二个线程。。
3、修改的方法,4楼是正解。