package java_study.forkjoin; import java.util.ArrayList; import java.util.List; import java.util.concurrent.ForkJoinPool; import java.util.concurrent.TimeUnit; /** * Created on 2018/3/30. */ public class ForkJoin { public static void main(String[] args)throws InterruptedException{ List<String> list=new ArrayList<String>(); for (int i=1;i<=1000;i++){ list.add("----"+i); } ForkJoinPool pool=new ForkJoinPool(5); // // 提交可分解的PrintTask任务 pool.submit(new SendMsgTask(list) ); // //线程阻塞,等待所有任务完成 pool.awaitTermination(10, TimeUnit.SECONDS); //关闭线程池 pool.shutdown(); } }
package java_study.forkjoin; import java.util.List; import java.util.concurrent.RecursiveAction; /** * Created on 2018/3/30. */ public class SendMsgTask extends RecursiveAction { private static final int THRESHOLD = 10; private int start; private int end; List<String> lst = null; public SendMsgTask(List<String> lstMsg) { this.start = 0; this.end = lstMsg.size(); this.lst = lstMsg; } @Override protected void compute() { if (end - start <= THRESHOLD) { String phone=""; for (int i = 0; i < lst.size(); i++) { // if () {} phone+=lst.get(i); } System.out.println(Thread.currentThread().getId() + "给手机号发短信"+phone); }else { int middle=lst.size()/2; SendMsgTask left=new SendMsgTask(lst.subList(start, middle)); SendMsgTask right=new SendMsgTask(lst.subList(middle,lst.size())); left.fork(); right.fork(); } } }