Heim  >  Artikel  >  Java  >  Einführung und Verwendung von Fork/Join in Java7

Einführung und Verwendung von Fork/Join in Java7

零下一度
零下一度Original
2017-06-25 10:42:261970Durchsuche

Fork/Join

Fork/Join, das in JAVA7 erschien, ähnelt der Mapreduce-Idee des verteilten Dateisystems Hadoop, bei der die Aufgabe aufgeteilt und dann aufgeteilt wird, bis die Bedingungen erfüllt sind

Um das Verständnis zu erleichtern: Die Programmierlogik kann die Idee der Rekursion ausleihen, Schicht für Schicht rekursieren, bis der endgültige Aufruf auftritt, und dann Schicht für Schicht in Fork/Join zurückkehren, ähnlich wie bei jeder Platzierung rekursive Methode in einem separaten Thread.

Nutzen Sie moderne Multi-Core-Prozessoren voll aus, um Aufgaben parallel zu verarbeiten

 

/**
 * 继承RecursiveTask 则每个子任务带返回值
 * 继承RecursiveAction 则每个子任务不带返回值 */public class FockJoin1 extends RecursiveTask<Integer>{public static void main(String[] args) throws ExecutionException, InterruptedException {long l = System.currentTimeMillis();
        ForkJoinPool pool = new ForkJoinPool();                         //类似线程池,也实现了AbstractExecutorServiceFockJoin1 task = new FockJoin1(1,1000000000);         //新建任务Future<Integer> result = pool.submit(task);                     //将任务提交System.out.println("result is" + result.get());                 //获取结果System.err.println(System.currentTimeMillis() - l);
    }private final Integer index = 5000; //分割任务的基数private final Integer left;private final Integer right;public FockJoin1(Integer left, Integer right) {this.left = left;this.right = right;
    }
    
    @Overrideprotected Integer compute() {int sum = 0;if(right - left < index) {                      //如果任务 小于基数,则直接执行;类似递归的出口for (int i = left; i <= right; i++) {
                sum += i;
            }
        }else {                                         //任务 大于基数,则分割,类似与二分法,也可以更多int middle = (right + left) >> 1;
            FockJoin1 myf1 = new FockJoin1(left, middle);           //二分法左边FockJoin1 myf2= new FockJoin1(middle+1, right);    //二分法右边myf1.fork();                                            //继续执行,类似递归myf2.fork();                                            //继续执行,类似递归Integer integer1 = myf1.join();                         //等待Integer integer2 = myf2.join();
            sum = integer1 + integer2;                              //结果合并        }return sum;
    }
}

Das obige ist der detaillierte Inhalt vonEinführung und Verwendung von Fork/Join in Java7. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn