日期:2014-05-20 浏览次数:21054 次
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楼是正解。