zoukankan      html  css  js  c++  java
  • fork Join框架

    fork Join很像mapreduce的处理过程。先将任务切割成小的任务分别计算然后再将小任务的计算结果合并起来

    package forkJoin;
    
    import java.util.concurrent.ExecutionException;
    import java.util.concurrent.RecursiveTask;
    
    /**
     * Created by luozhitao on 2017/9/29.
     */
    public class forkTask extends RecursiveTask<Integer> {
        private static int LIMIT=10;
        int start;
        int end;
    
        int sum;
    
        public forkTask(int start,int end){
    
            this.start=start;
            this.end=end;
    
    
        }
    
    
        @Override
        protected Integer compute() {
    
    
            if(end-start<LIMIT){
    
    
                for (int i=start;i<=end;i++){
    
    
                    sum+=i;
                }
    
            }
            else{
    
                int mid=(start+end)/2;
    
             //   System.out.println("new -----");
    
                forkTask task1=new forkTask(start,mid);
                forkTask task2=new forkTask(mid+1,end);
    
                invokeAll(task1,task2);
                try {

    //拿到小任务的计算结果 sum
    = task1.get() + task2.get(); }catch (InterruptedException e){ } catch (ExecutionException e){} } return sum; } }

    main

    package forkJoin;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import java.util.concurrent.ExecutionException;
    import java.util.concurrent.ForkJoinPool;
    import java.util.concurrent.Future;
    
    /**
     * Created by luozhitao on 2017/9/29.
     */
    public class Taskapp {
    
        private  static Logger logger= LoggerFactory.getLogger(Taskapp.class);
    
        public static void main(String [] args){
    
    
            ForkJoinPool forkJoinPool=new ForkJoinPool();
    
    
            forkTask forktask=new forkTask(1,1000000);
    
            Future<Integer> future=forkJoinPool.submit(forktask);
    
    
            do{
    
                logger.info("activeThreadCount {},stealCount {},parallelisem {},QueueCount {}",forkJoinPool.getActiveThreadCount(),forkJoinPool.getStealCount(),forkJoinPool.getParallelism(),forkJoinPool.getQueuedTaskCount());
            //    logger.info("stealCount",forkJoinPool.getStealCount());
    
                //最大并发数
          //      logger.info("parallelisem",forkJoinPool.getParallelism());
           //     logger.info("QueueCount",forkJoinPool.getQueuedTaskCount());
    
    
            }while (!forktask.isDone());
    
    
            forkJoinPool.shutdown();
    
            try {
                logger.info("results is {}",future.get());
    
            }catch (ExecutionException e){
    
    
            }catch (InterruptedException e){}
    
    
    
            //
    
    
    
            //
    
         //
    
    
        }
    }
  • 相关阅读:
    将Tomcat配置到你的mac电脑上,命令行启动tomcat
    Java反射获取字节码以及判断类型
    mysql那些事
    Hibernate 一对一中的一些问题
    Java long类型和Long类型的那些事
    java中的多线程
    Struts2:java.lang.NoSuchFieldException: resourceEntries at java.lang.Class.getDeclaredField(Class.java:1901)
    生产者-消费者模式
    并行程序设计模式--Master-Worker模式
    Ibatis的类型处理器TypeHandler解析
  • 原文地址:https://www.cnblogs.com/luo-mao/p/7610422.html
Copyright © 2011-2022 走看看