我正在学习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(".");
}
}
}
答案 0 :(得分:4)
当您在线程上调用start()
时,您无法保证它的启动速度。这取决于计算机的线程调度程序。如果多次运行代码,您可能会为线程获得几个不同的执行顺序。
答案 1 :(得分:2)
开始一个线程的调用是异步的。它不会等到线程开始运行才返回;它基本上立即返回。
您可以通过一些锁定来自己实现该行为,这样主线程就会暂停,直到您开始发出某种信号,表明它已经开始执行。