各位帮忙看下程序,我的要求是让子线程执行10次,再让主线程执行10次,为什么程序运行结果是子线程和主线程交替执行public class TestThread { public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
synchronized (TestThread.class) {
new Thread(new Runner()).start();
}
synchronized (TestThread.class) {
for (int j = 0; j < 10; j++) {
System.out.println("主线程: " + i);
}
}
}
}
}class Runner implements Runnable { @Override
public void run() {
for (int i = 1; i <= 10; i++) {
System.out.println("子线程执行了: " + i);
}
}
}
非常感谢!

解决方案 »

  1.   

    多个线程并行执行,CPU按时间片轮转,交替执行不同的线程,是没有错的。
      

  2.   

    对同步锁的理解有误同步锁是锁不同线程里的代码段的。
    上面你的两段共同使用一个锁的代码,其实都是在主线程里执行的。如果只是简单的,启动一个子线程,然后主线程先执行10步,再让子线程运行,修改下代码,把 synchronized (TestThread.class) 加到 Runner.run()方法里即可如果要做到2个线程交替执行,必须采用类似于信号灯的概念来指示当前让谁执行.
      

  3.   

    改了几个地方,楼主试试!public class TestThread
    {
    public static void main(String[] args) 
    {
    for (int i = 0; i < 10; i++) 
    {
    new Thread(new Runner()).start(); //这不加锁。
    //主线程休眠10ms,让子线程得到先执行的机会。
    try
    {
    Thread.sleep(10);
    }
    catch(InterruptedException ie)
    {
    ie.printStackTrace();
    }
    synchronized (TestThread.class)
            {
    for (int j = 0; j < 10; j++) 
    {
    System.out.println("主线程: " + i);
    }
    }
    }
    }
    }class Runner implements Runnable
    {
    @Override
    public void run() 
    {
    synchronized(TestThread.class) //在这加。
    {
    for (int i = 1; i <= 10; i++) 
    {
    System.out.println("子线程执行了: " + i);
    }
    }
    }
    }
      

  4.   

    是的, 不过可以看到synchronized 的作用。
      

  5.   

    是锁对象 还是利用对象来锁先搞清楚吧
    在线程同步里有一个叫做Monitor的东西 可以结合做东西时候的异常显示先搞清楚它是干什么的