Thread.join()说明

时间:2017-02-16 20:13:56

标签: java multithreading

我现在正在学校学习线程,我们必须编写一个使用多个线程的程序,但是在我使用thread.join()

之前它无法正常工作

它的工作原理应该是现在,但我不完全确定发生了什么。

最初我有这样的事情。它导致线程的输出相互冲突。

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

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

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

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

3 个答案:

答案 0 :(得分:3)

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 );

答案 1 :(得分:0)

作为javadoc:

  

等待此线程死亡。调用此方法的行为   与调用

的方式完全相同

因此,当您调用t1.join();线程时,您已拨打电话等待t1完成,然后再执行下一行。如果t1永远不会完成,则永远不会执行下一行。

答案 2 :(得分:0)

你做的第二个例子实际上类似于单个线程 - 意味着你运行一个线程,等待它完成而不是运行下一个线程。

  

public final void join():这个java线程连接方法使当前线程处于等待状态,直到调用它的线程死亡。如果线程被中断,则抛出InterruptedException。

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

可以看到类似的问题here