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

Fork / Join-Framework wurde in Java eingeführt 7 Multi-Threading / Parallel-Programmierung Probleme zu lösen.

Es ist sehr schwierig, mit gleichzeitig zu beschäftigen (parallel) Programmierung durch traditionelle Art und Weise unter Verwendung von. Weil Sie mit Thread-Synchronisation zu tun haben, Benachrichtigung, beitreten etc und auch die Gefahren der gemeinsam genutzten Ressourcen. Sprache-Level-Support für die gleichzeitige Programmierung auf der Java-Plattform ist sehr stark, wie durch die Anstrengungen in verschiedenen Gemeinden bewährt. Diese Gemeinschaften alle versuchten, umfassende Programmiermodelle und effiziente Implementierungen zur Verfügung zu stellen, die die Schmerzpunkte abstrahiert im Zusammenhang mit Multi-Threading und verteilt applications.Java Platform, Standard Edition (Java SE) 5 und dann Java SE 6 einen Satz von Paketen eingeführt (Executor Service)bietet leistungsstarke Gleichzeitigkeit Bausteine. Java SE 7 weiter verbessert den Rahmen mehrere Träger für Parallelität Hinzufügen.

Fork / Join ist ein neues Konzept in Java 7.0 version. Der grundlegende Zweck dieses Rahmens ist es, die Multithreading-Umgebung in Java-Anwendungen zu erleichtern. Je feiner dann der Testamentsvollstrecker Service-Framework ist Gabel / beitreten Rahmen. Es nimmt die Vorteile aller Verarbeitungsleistung und damit die Anwendung mehr Ressourcen- und Verarbeitung bekommt Strom. Es ist eine Implementierung der ExecutorService Schnittstelle, die Sie die Vorteile von mehreren Prozessoren nehmen hilft. Es ist für die Arbeiten entwickelt, die in kleinere Stücke rekursiv durchbrochen werden kann und somit die Verarbeitung schneller machen.

Ähnlich wie bei ExecutorService, die Gabel / join Rahmen auch Aufgaben zu Worker-Threads in einem Thread-Pool verteilt. Aber der wesentliche Unterschied besteht darin, dass die Gabel / beitreten Rahmen verwendet einen Work-Diebstahl-Algorithmus. Hier werden die Worker-Threads, die aus der Dinge zu tun, können von anderen Threads Aufgaben zu stehlen, die noch beschäftigt sind. Die ForkJoinPoolclass ist eine Erweiterung des AbstractExecutorService und das Herz des Rahmen. ForkJoinPool implementiert die Kernarbeits-Diebstahl-Algorithmus und führt ForkJoinTasks.
Nun lassen Sie mich ein Beispiel, das Konzept im Detail zu verstehen,.

Die grundlegenden Schritte sind
· Teilen Sie die Aufgabe
· Weisen Sie auf die verfügbaren Threads
· Nach Abschluss der Stücke verbinden und machen es vervollständigen

Lassen Sie uns eine Liste nehmen, die große Anzahl von ganzen Zahlen erzeugt zufällig enthalten.

Diese Klasse zeigt die traditionelle Art und Weise die Aufgabe zu tun.

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;
}
}

Nun ist die folgende SplitTask Klasse ist die Durchführung der Spaltung und Aufgabe beitreten.

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;
}

@ Override
protected void compute() {
wenn (List.length == 1) {
Ergebnis = Liste[0];
} sonst {
int Mittelpunkt = List.length / 2;
int[] l1 = Arrays.copyOfRange(Liste, 0, Mittelpunkt);
int[] l2 = Arrays.copyOfRange(Liste, Mittelpunkt, List.length);
SplitTask s1 = new SplitTask(l1);
SplitTask s2 = new SplitTask(l2);
forkJoin(s1, s2);
Ergebnis = s1.result + s2.result;
}
}
}

Die letzte Klasse testet den Prozess. Es ist das Aufrufen der ForkJoinExecutor Pool, um die Aufgabe zu erfüllen.

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);

}
}

============================================= ============================================== Buy best TechAlpine Books on Amazon
============================================== ---------------------------------------------------------------- electrician ct chestnutelectric
error

Enjoy this blog? Please spread the word :)

Follow by Email
LinkedIn
LinkedIn
Share