0

我正在学习java中的MULTITHREADING,我想知道为什么在下面的代码中,当执行start方法调用子线程中的run方法时,子线程没有立即运行?

相反,在执行 start 方法后,主线程继续执行其代码并开始打印“.”。它做了三遍,控制权由子线程接管。然后子线程执行一次它的代码并返回到主线程。然后主线程完成,然后子线程也完成其执行。

我无法理解为什么会这样?

class MyThread implements Runnable {

    String thrdName;

    MyThread(String name) {
        thrdName = name;
    }

    public void run() {
        System.out.println(thrdName + " starting.");
        for (int count = 0; count < 10; count++) {
            System.out.println("In " + thrdName + ", count is " + count);
        }
    }
}

class UseThreads {

    public static void main(String args[]) {
        System.out.println("Main thread starting.");
        MyThread mt = new MyThread("Child #1");
        Thread newThrd = new Thread(mt);
        newThrd.start();
        for (int i = 0; i < 50; i++) {
            System.out.print(".");
        }
    }
}
4

2 回答 2

4

当你调用start()你的线程时,你无法保证它会以多快的速度启动。这取决于您计算机的线程调度程序。如果您多次运行代码,您的线程可能会得到几个不同的执行顺序。

于 2012-08-08T23:33:52.977 回答
2

开始线程的调用是异步的。它不会等到线程开始运行才返回;它基本上立即返回。

您可以自己实现该行为,并带有一点锁定,这样您的主线程就会暂停,直到您开始的线程发出某种信号,以表明它已经开始执行。

于 2012-08-08T23:35:53.113 回答