• 技术文章 >Java >java教程

    java中ThreadPoolExecutor并发调用的实例代码分析

    黄舟黄舟2017-05-28 09:11:13原创846
    这篇文章主要介绍了java ThreadPoolExecutor 并发调用实例详解的相关资料,需要的朋友可以参考下

    java ThreadPoolExecutor 并发调用实例详解

    概述

    通常为了提供任务的处理速度,会使用一些并发模型,ThreadPoolExecutor中的invokeAll便是一种。

    代码

    package test.current;
    
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    import java.util.concurrent.Callable;
    import java.util.concurrent.ExecutionException;
    import java.util.concurrent.Future;
    
    public class TestCallable {
    
      public static void main(String[] args) throws InterruptedException, ExecutionException {
    
        List<Callable<List<Long>>> tasks = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
          Callable<List<Long>> task = new Callable<List<Long>>() {
            @Override
            public List<Long> call() throws Exception {
              return Arrays.asList(1L,2L);
            }
          };
    
          tasks.add(task);
        }
    
        List<Long> finalResults = new ArrayList<>(10);
        List<Future<List<Long>>> results = ThreadPool.getThreadPool().invokeAll(tasks);
        for(Future<List<Long>> ele : results) {
          List<Long> list = ele.get();
          finalResults.addAll(list);
        }
    
        System.out.println(finalResults);
      }
    }
    package test.current;
    
    import java.util.concurrent.ArrayBlockingQueue;
    import java.util.concurrent.ThreadPoolExecutor;
    import java.util.concurrent.TimeUnit;
    
    public class ThreadPool {
      private static final int CORE_SIZE = 8;
    
      private static final int MAX_SIZE = 12;
    
      private static final long KEEP_ALIVE_TIME = 30;
    
      private static final int QUEUE_SIZE = 50000;
    
      private static ThreadPoolExecutor threadPool = new ThreadPoolExecutor(CORE_SIZE, MAX_SIZE, KEEP_ALIVE_TIME,
          TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(QUEUE_SIZE), new ThreadPoolExecutor.AbortPolicy());
    
      public static ThreadPoolExecutor getThreadPool() {
        return threadPool;
      }
    }

    可以把需要执行的任务创建一个Callable task,利用线程池中的线程并发的执行这些task,从而提高任务的执行效率。

    以上就是java中ThreadPoolExecutor并发调用的实例代码分析的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    上一篇:Java异常处理运行时异常的详解及实例代码分享 下一篇:java如何使用ConcurrentHashMap与计数器来实现锁的详解
    大前端线上培训班

    相关文章推荐

    • 理解java8中java.util.function.*pojo反射新方法(附代码)• 浅析安卓app和微信授权登录及分享完整对接(代码分享)• 一招教你使用java快速创建Map(代码分享)• 教你一招搞定时序数据库在Spring Boot中的使用• 一文讲解Java中初始化List集合的8种方式(附代码)

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网