[英]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.