java併發編程學習之Fork/Join 框架-基本概念(一)

思想

把大任務分割成多個小任務,再把小任務的結果彙總,最終獲得大任務的結果。spa

步驟以下:

  1. 任務分割
  2. 結果彙總

示例圖

clipboard.png

工做竊取

指的是線程從其餘線程竊取任務來執行。當一個大任務分割成多個小任務的時候,爲了減小線程之間的競爭,把小任務放在不一樣的隊列裏,每一個隊列都分配一個線程來執行任務。當一個線程執行完當前隊列的任務時,他就會去竊取其餘隊列的任務來執行。因爲都是同一個隊列執行小任務,爲了減小線程之間的競爭,竊取任務的時候,從隊列的尾部拿任務。線程

  • 優勢:充分利用了線程的計算,減小線程之間的競爭
  • 缺點:blog

    1. 消耗系統資源,好比建立線程和多個雙端隊列。
    2. 當雙端隊列只有一個任務時,線程之間會競爭。

示例圖

clipboard.png

ForkJoinTask

實現了Future的接口,主要的子類有RecursiveAction和RecursiveTask。
clipboard.png接口

  • RecursiveAction:沒有返回值
  • RecursiveTask:有返回值

主要的方法:隊列

  • fork():再建立一個子任務
  • invoke():執行任務
  • join():返回計算後的結果

ForkJoinPool

經過調用invoke來執行ForkJoinTask的任務。ip

相關文章
相關標籤/搜索