繁体   English   中英

Thread.join()解释

[英]Thread.join() explanation

我现在在学校学习线程,我们不得不编写一个使用多个线程的程序,但是,直到我使用thread.join() ,它才能正常工作

它像现在应该那样工作,但是我不确定是怎么回事。

本来我有这样的事情。 这导致线程的输出相互冲突。

t1.start();
t2.start();
t3.start();

然后,我这样做了,输出结果很好,并且得到了正确的答案。

 t1.start();
 t1.join();
 t2.start();
 t2.join();
 t3.start();
 t3.join();

我的问题是,与第二个例子相比,第一个例子发生了什么? 我一直在搜索和搜索stackoverflow,但似乎找不到完全可以帮助我理解的答案。

t.join()使当前线程暂停执行,直到t的线程终止。

通过做这个:

 t1.start();
 t1.join();
 t2.start();
 t2.join();
 t3.start();
 t3.join();

没有理由使用线程...

thead.join()使用示例:

假设您需要加密3个文件,想要使用线程来缩短处理时间,并且想知道花费了多少时间:

int startTime = System.currentTimeMillis();
firstFileEncryptorThread.start();
secondFileEncryptorThread.start();
thirdFileEncryptorThread.start();

firstFileEncryptorThread.join();
secondFileEncryptorThread.join();
thirdFileEncryptorThread.join();

System.out.println(System.currentTimeMillis() - startTime );

作为javadoc:

等待该线程死亡。 对该方法的调用与该调用的行为完全相同

因此,当您调用t1.join(); 在执行下一行之前,已使调用等待t1完成的线程。 如果t1从未完成,则将永远不会执行下一行。

第二个示例实际上是与单线程类似的-意味着您运行一个线程,等待它完成,然后运行下一个线程。

public final void join():此java线程连接方法将当前线程置于等待状态,直到调用该线程的线程失效为止。 如果线程被中断,则抛出InterruptedException。

在第一个示例中-所有线程并行运行

可以在这里看到类似的问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM