日期:2014-05-18  浏览次数:20680 次

关于start调用问题
package com.test;

public class MyThread extends Thread
{

@Override
public void run() {
System.out.println("run函数");
}

public void disp1()
{
System.out.println("disp函数1");
}

public void disp2()
{
System.out.println("disp函数2");
}
}

package com.test;
public class TestBlockingQueue {

public static void main(String[] args) 
    {
MyThread mt = new MyThread();
mt.start();
mt.disp1();
    }
}


这样写,为什么那个run()函数在disp1()后面执行?原理是啥?

------解决方案--------------------
改成下面的在看看结果。

@Override
    public void run() {
for (int i = 0; i < 10000; i++) {
        System.out.println("run函数");
}
    }
     
    public void disp1()
    {
for (int i = 0; i < 10000; i++) {
        System.out.println("disp函数1");
}
    }

------解决方案--------------------
线程的调用,执行顺序是随有JVM管理。 
------解决方案--------------------

mt.start(); // 当主线程可以理解为main,执行到这里,子线程mt起来之后,mt执行,main继续执行。这两个是同时运行的
        mt.disp1();//到这里的话打印哪个都是不确定的。哪个快就执行哪个打印。

按照一楼程序就可以看出来了。

------解决方案--------------------
恩,这个顺序确实没法确定。