下面是我的示例代码,当我a.start()
调用它时,它应该创建一个线程并立即打印“运行”。但是为什么在打印“开始”20次之后调用呢。
线程“a”如何决定不必run()
立即调用。
public class JoinTest implements Runnable {
public static void main(String[] args) throws InterruptedException {
Thread a = new Thread(new JoinTest());
a.start();
for (int i = 0; i < 20; i++) {
System.out.print("Begin");
}
Thread.sleep(1000);
a.join();
System.out.print("\nEnd");
}
public void run() {
System.out.print("\nRun");
}
}
输出:
BeginBeginBeginBeginBeginBeginBeginBeginBeginBeginBeginBeginBeginBeginBeginBeginBeginBeginBeginBegin
Run
End
我对线程的行为有点困惑。
我认为"run"
应该在之前打印,"begin"
因为它join()
是在调用方法之前打印的,并且在调用线程“a”的连接方法时必须已经完成了它的执行,此时调用连接必须是无用的。