2017-05-21 29 views
0

我已經明白,分叉和連接用於多線程,但我不明白什麼,當一個任務分叉時發生。分叉任務是否會導致任務返回計算方法的開始?還是這個任務做了別的事情?如果我想要一個任務跳轉到除計算以外的其他方法,並在分叉時運行,我該如何告訴它這樣做?有什麼可以擴展到(instance).fork();,我可以包含這些擴展來指定它?當一個任務分叉時,究竟發生了什麼?

回答

0

使用fork/join框架的任務實際上是遞歸地將split分成較小的子任務,因此它們可以同時執行。 通過分叉,每個子任務可以由不同的CPU並行執行,也可以由同一CPU上的不同線程執行。 所有子任務執行完成後,join部分開始。 在這個過程中,所有子任務的結果都遞歸地加入到一個結果中。 這整個過程發生在「幕後」,可以使用稱爲ForkJoinPool的線程池來實現,該線程管理類型爲ForkJoinWorkerThread的線程。

+0

任務分叉時這些子任務會發生什麼?他們是否立即開始執行其他功能,或者是否需要調用它們來執行任何操作?你能更全面地解釋一下嗎? – JKristol

+0

請參閱上面我更新的答案。 –

+0

你可以給出一個如何執行這些單獨線程的例子嗎?我還不太明白。我試圖得到的是分叉線程在代碼中的位置。我不確定分叉的線程是否再次啓動計算方法,或者它們是否處於空閒狀態直到被調用。 – JKristol