我在线程连接中有一个查询。查询是线程连接是否意味着在连接之后所有线程都将暂停,直到它上面的线程成功完成为止
在下面的代码中,我在one.start之后放置了 one.join
One one = new One();
Two two = new Two();
Three three = new Three();
Four four = new Four();
one.start();
one.join(); // join placed after one.start
two.start();
three.start();
four.start();
我得到了下面给出的结果,表明它阻塞了两个,三个和四个线程,直到第一个线程完成它。
首先0
第1页 前2个 前3个 前4个 第二个0 第三个0 第四个0 第二个1 第四个1 第三个1 第二个2 第三个2 第四2 第二个3 第四个3 第三个3 第二个4 第四4 第三个4
现在,在下面的代码中,我在one.join()
之后放置了two.start()
:
One one = new One();
Two two = new Two();
Three three = new Three();
Four four = new Four();
one.start();
two.start();
one.join(); // join placed after two.start
three.start();
four.start();
我得到了下面给出的结果,表明它阻塞了三个和四个线程,直到一个和两个线程完成。
首先0
第二个0 第1页 第二个1 第二个2 前2个 第二个3 前3个 第二个4 前4个 第四个0 第三个0 第三个1 第四个1 第三个2 第四2 第三个3 第四个3 第3 4 第四季度
答案 0 :(得分:3)
t.join()
死亡时, t
返回。它就是这样做的,它确定了一个"发生在"关系,意味着调用者保证在join()调用返回后能够看到线程在内存中触及的所有内容。
基本上,您需要了解有关t.join()
的所有内容,以便在Java程序中正确使用它。
如果你这样写:
one.start();
one.join();
two.start();
加入调用不会对线程two
执行任何操作。事实上,它也没有做任何线程one
。它只影响来电者。
Java语句按顺序执行。上面是一系列三个陈述。 one.start()
启动一个帖子。 one.join()
等待该线程终止。 two.start()
启动另一个帖子。
在序列中的前一个语句完成之前,不能执行一个语句。因此,在two.start()
返回之前,one.join()
无法执行,并且在one
线程死亡之前不会发生,因为one.join()
是什么<p:commandButton value="Go" update="userTokens"
actionListener="#{userAdministrationBean.fetchUserTokens}" />
<p:pickList value="#{userAdministrationBean.userTokensList} "
id="userTokens" var="token" itemLabel="#{token}" itemValue="#{token}">
</p:pickList>
}:它等待线程死亡。