2017-05-21 28 views
0

我已经明白,分叉和连接用于多线程,但我不明白什么,当一个任务分叉时发生。分叉任务是否会导致任务返回计算方法的开始?还是这个任务做了别的事情?如果我想要一个任务跳转到除计算以外的其他方法,并在分叉时运行,我该如何告诉它这样做?有什么可以扩展到(instance).fork();,我可以包含这些扩展来指定它?当一个任务分叉时,究竟发生了什么?

回答

0

使用fork/join框架的任务实际上是递归地将split分成较小的子任务,因此它们可以同时执行。 通过分叉,每个子任务可以由不同的CPU并行执行,也可以由同一CPU上的不同线程执行。 所有子任务执行完成后,join部分开始。 在这个过程中,所有子任务的结果都递归地加入到一个结果中。 这整个过程发生在“幕后”,可以使用称为ForkJoinPool的线程池来实现,该线程管理类型为ForkJoinWorkerThread的线程。

+0

任务分叉时这些子任务会发生什么?他们是否立即开始执行其他功能,或者是否需要调用它们来执行任何操作?你能更全面地解释一下吗? – JKristol

+0

请参阅上面我更新的答案。 –

+0

你可以给出一个如何执行这些单独线程的例子吗?我还不太明白。我试图得到的是分叉线程在代码中的位置。我不确定分叉的线程是否再次启动计算方法,或者它们是否处于空闲状态直到被调用。 – JKristol