What is Fork/Join framework in java 7.0 (Parallel programming)?

Fork/Join framework has been introduced in java 7 to solve multi-threading/parallel programming issues.

It is very difficult to deal with concurrent (parallel) programming by using traditional way. Because you have to deal with thread synchronization, notification, 加盟等,並共享資源也是陷阱. 在Java平台上並發編程語言層面的支持是非常強的在不同的社區努力,證明. 這些社區都試圖提供全面的編程模型和高效的實現,抽象與多線程和分佈式applications.Java平台相關的痛點, 標準版 (Java SE的) 5 然後的Java SE 6 推出了一套包 (執行人服務)提供強大的並行構建模塊. Java SE的 7 進一步提高了框架增加了更多並行支持.

叉/加入是Java中的一個新概念 7.0 version. 這個框架的基本宗旨是促進在Java應用程序多線程環境. 越精細則執行人服務框架叉/ join框架. 它需要所有的處理能力的優點,因此應用程序獲取多個資源和處理能力. 這是ExecutorService的接口的實現,可以幫助您利用多個處理器的優勢. 它是專為作品可被細分成更小的碎片遞歸,因而使處理速度更快.

類似的ExecutorService, 叉/ join框架中的一個線程池也分配任務的工作線程. 但主要的區別在於,叉/ join框架使用工作竊取算法. 在這裡,用完的事情要做的工作線程可以竊取從還在忙著其他線程任務. 該ForkJoinPoolclass是的AbstractEx​​ecutorService的延伸和框架的心臟. ForkJoinPool實現了核心工作竊取算法和執行的ForkJoinTasks.
現在讓我來舉個例子來了解詳細的概念.

的基本步驟是
· 拆分任務
· 它分配給可用線程
· 完成後加入塊,並使其完成

讓我們看看其中將包含大量的隨機產生的整數列表.

這個類是顯示傳統的方式做任務.

package javablog.levent.com;
import java.util.Random;
// This class defins a list which will contain large number of integers.
public class LargeInteger {
private final int[] list = new int[2000000];
public largeInteger() {
Random generator = new Random(19580427);
for (int i = 0; i < list.length; i++) {
list[i] = generator.nextInt(500000);
}
}
public int[] getList() {
return list;
}
}

現在下面SplitTask類進行分割和結合任務.

package javablog.levent.com;
import java.util.Arrays;
import jsr166y.forkjoin.RecursiveAction;
public class SplitTask extends RecursiveAction {
private int[] list;
public long result;
public SplitTask(int[] array) {
this.list = array;
}

@覆蓋
保護無效計算() {
如果 (List.length的數字== 1) {
結果=名單[0];
} 其他 {
INT中點= List.length的數字 / 2;
詮釋[] L1 = Arrays.copyOfRange(名單, 0, 中點);
詮釋[] L2 = Arrays.copyOfRange(名單, 中點, List.length的數字);
SplitTask S1 =新SplitTask(L1);
SplitTask S2 =新SplitTask(12);
forkJoin(S1, S2);
結果= s1.result + s2.result;
}
}
}

最後一類是測試過程. 它被調用ForkJoinExecutor池執行任務.

package javablog.levent.com;
import jsr166y.forkjoin.ForkJoinExecutor;
import jsr166y.forkjoin.ForkJoinPool;
import javablog.levent.com.SplitTask;
public class TestForkJoin {
public static void main(String[] args) {
LargeInteger test = new LargeInteger();
// Check the number of available processors
int nThreads = Runtime.getRuntime().availableProcessors();
System.out.println(nThreads);
SplitTask mfj = new SplitTask(test.getList());
ForkJoinExecutor pool = new ForkJoinPool(nThreads);
pool.invoke(mfj);
long result = mfj.getResult();
System.out.println("Done. Result: " + result);

}
}

============================================= ============================================== 在亞馬遜上購買最佳技術書籍,en,電工CT Chestnutelectric,en
============================================== ---------------------------------------------------------------- electrician ct chestnutelectric
error

Enjoy this blog? Please spread the word :)

Follow by Email
LinkedIn
LinkedIn
Share