Package Com.chinamobile.epic.tako.common.graphite.query.sync.impl;import Com.google.common.collect.lists;import Java.util.list;import Java.util.concurrent.forkjoinpool;import Java.util.concurrent.forkjointask;import Java.util.concurrent.recursivetask;import Java.util.concurrent.timeunit;public class GraphiteQueryTask extends recursivetask<list<string>> {private list<string> UUIDs; private int THRESHOLD = 12; Public Graphitequerytask (list<string> uuids) {this.uuids = UUIDs; } public static void Main (string[] args) {Forkjoinpool pool = Forkjoinpool.commonpool (); List<string> UUIDs = Lists.newarraylist (); for (int i = 0; i < i++) {Uuids.add ("uuid-" + i); } list<string> result = Pool.invoke (new Graphitequerytask (UUIDs)); System.out.println ("========== results ============"); SYSTEM.OUT.PRINTLN (result); } @Override protected list<string> compute () { list<string> result = Lists.newarraylist (); list<graphitequerytask> forks = Lists.newarraylist (); if (Uuids.size () > THRESHOLD) {int mid = Uuids.size () >>> 1; Graphitequerytask firsttask = new Graphitequerytask (lists.newarraylist (uuids.sublist (0, mid)); Graphitequerytask secondtask = new Graphitequerytask (Lists.newarraylist (Uuids.sublist (Mid, Uuids.size ())); Forks.add (Firsttask); Forks.add (Secondtask); Forkjointask.invokeall (forks); } else {Result.add (Postgraphite (UUIDs)); } for (recursivetask<list<string>> task:forks) {Result.addall (Task.join ()); } return result; } private String Postgraphite (list<string> UUIDs) {System.out.println ("============>threadid: [" + THR Ead.currentthread (). GetId () + "], uuids.size:[" + uuids.size () + "]"); System.out.println (UUIDs); try { TimeUnit.SECONDS.sleep (5); } catch (Interruptedexception e) {e.printstacktrace (); } return "@@@-" + thread.currentthread (). GetId () + "-" + uuids.size (); }}
Http://www.baeldung.com/java-fork-join
"Fork/join" Java Concurrency programming-fork/join example