哪一个首先运行:新线程或主线程?

时间:2014-06-29 00:32:51

标签: java scheduler

我运行此代码并得到了这个结果:

//back in main
//directly from the runnable
//top of the stack

我不应该top of the stack作为我的第一个结果吗?

public class MyRunnable implements Runnable {
    public void run() {
        System.out.println("directly from the runnable");
        go();
    }
    public void go() {
        doMore();
    }
    public void doMore() {
        System.out.println("top of the stack");
    }
}

public class ThreadTester{

    public static void main(String[] args) {
        Runnable threadJob = new MyRunnable();
        Thread myThread = new Thread(threadJob);

        myThread.start();

        System.out.println("back in main");
    }

}

2 个答案:

答案 0 :(得分:4)

线程没有特定的顺序,它可以是任何一种方式。 JVM是决定它的那个,它每次都可以给出不同的结果。

答案 1 :(得分:3)

你的runnable()或你的main()可能会先开始,但是这个

public void run() {
    System.out.println("directly from the runnable");
    go();
}

意味着"直接来自runnable"将始终在#34;堆栈顶部"之前打印。如果你想要扭转,

public void run() {
    go();
    System.out.println("directly from the runnable");
}