为什么在启动线程之前无法.join()
?如果我在一个线程上调用join(),即使以前没有启动也不应该是隐式的吗?
答案 0 :(得分:6)
因为join()
等待线程死亡,因为Javadoc说;如果尚未开始它就不会死亡。
我不认为它应该启动一个线程,如果它没有启动,因为该方法会做两件事:启动一个线程并等待线程,这是糟糕的设计。
答案 1 :(得分:2)
join方法允许一个线程等待另一个线程的完成。如果t
是其线程当前正在执行的Thread对象,则
t.join();
导致当前线程暂停执行,直到t的线程终止。连接过载允许程序员指定等待期。
所以它清楚地告诉你,如果你加入一个线程,那么当前的线程 将等到线程终止。所以如果一个线程没有 开始了它怎么能被终止。
矛盾证明:D
假设您可以在不启动的情况下加入线程t
。然后你打电话
t.join();
现在根据加入当前线程的行为将等待。现在说一些邪恶的想法(!)出现在你的脑海中,你还没有开始线程(:D)。现在会发生什么?想象一下这个场景,你会找到答案