【发布时间】:2018-05-30 13:32:22
【问题描述】:
这里是一些示例代码。 MyRunnable 类只打印“Thread x started”,并且有一个 Thread.sleep(4000)。其余的对我的问题并不重要。以下代码在另一个类中:
Thread t1 = new Thread(new MyRunnable, "t1");
Thread t2 = new Thread(new MyRunnable, "t2");
Thread t3 = new Thread(new MyRunnable, "t3");
t1.start(); t2.start(); t3.start();
try {
t1.join();
t2.join();
t3.join();
} catch(InterruptedException e) {
...
我知道join 会强制程序等待this 线程完成。因此,在阅读程序时,我期望 t1->t2->t3 是终止的顺序。但是,我同时终止了 t1、t2 和 t3。
问题:上面的代码发生了什么(从运行时的角度来看)?执行顺序是什么?
谢谢
【问题讨论】:
-
没有必要。当您到达
t1.join()时,所有或部分线程已经可以完成运行。 -
顺便说一句,您设置的线程没有执行顺序。 JVM 可以选择在
t1或t2之前完成t3。 -
您应该问自己的问题是:“谁在等待线程?” (ps.我想只有主线程在等待)
-
"其余的对我的问题并不重要" - 至少应该提供一个MCVE
标签: java multithreading concurrency