为什么我们应该在线程中使用Join?

BOS*_*OSS 16 java multithreading

我有2个线程T1和T2,两个都有不同的工作,所以我们通常更喜欢通过线程连接来完成这个任务.

但我们可以使用join()完成此操作.我们可以在T1线程中添加T2线程的代码.这有什么不同?

Tho*_*mas 25

加入一个线程意味着一个人等待另一个人结束,这样你就可以安全地访问它的结果,或者在两个人完成工作后继续.

示例:如果您在主线程中启动一个新线程并且两者都做了一些工作,那么您将加入新创建的线程上的主线程,导致主线程等待第二个线程完成.因此,您可以并行完成一些工作,直到您到达联接.

如果将作业拆分为由不同线程执行的两个部分,则可以获得性能改进

  • 线程可以独立运行,即如果它们不依赖于彼此的数据,否则你必须同步哪些成本性能
  • JVM能够并行执行多个线程,即你有一个超线程/多核机器,JVM使用它


use*_*421 22

通常我们更喜欢通过线程连接来完成这个任务.

不,我们不.我们通过启动两个线程来完成此任务.没有义务使用,join()因此没有"应该"使用它.如果要在另一个线程完成时暂停当前线程,请执行此操作.如果你不这样做,不要.


Leo*_*ngs 14

如果你T1.join();从T2 打电话,它将等待T1死亡(完成).它是一种线程同步的形式,但是从你描述的内容中你可以简单地触发两个线程并且根本不使用join.如果您使用两个线程,那么工作将并行完成,如果您只将代码放在一个线程中,那么工作将按顺序完成.


Ale*_*nin 5

以下是使用join的原因:当最终结果取决于可以同时运行的两个任务的结果时,可以使用它.

示例1:用户单击"提交"按钮后,程序必须调用两个外部Web服务来更新其各自的系统.它可以在同一时间完成,这就是为什么我们要为其中一个webservices创建一个单独的线程.

用户将坐在屏幕前等待通知:您的提交正常!两个线程完成后,屏幕应该说OK.


BOS*_*OSS -8

主要区别是,当我们将 T2 线程与 T1 加入时,T2 执行作业的时间也可以被 T1 利用,这意味着它们将并行执行不同的作业。但是当您在 T1 中包含 T2 线程代码时,这种情况就不会发生线。