码迷,mamicode.com
首页 > 编程语言 > 详细

java多线程(一)

时间:2018-12-08 17:10:24      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:ESS   queue   dfa   处理   提交   线程池   cal   lis   creates   

一、invokeAll

  Executors支持通过invokeAll()一次批量提交多个callable。这个方法结果一个callable的集合,然后返回一个future的列表。

 1 public static void main(String[] args) throws InterruptedException {
 2         // 根据cpu是几核来开启几个线程
 3         ExecutorService service = Executors.newWorkStealingPool();
 4         List<Callable<String>> callables = Arrays.asList(
 5                 () -> "task1",
 6                 () -> "task2",
 7                 () -> "task3",
 8                 () -> "task4",
 9                 () -> "task5");
10 
11         service.invokeAll(callables)
12                 .stream()
13                 .map(future -> {
14                     try {
15                         return future.get();
16                     }
17                     catch (Exception e) {
18                         throw new IllegalStateException(e);
19                     }
20                 })
21                 .forEach(System.out::println);
22     }

  看一下Executors.newWorkStealingPool()调用源码为:

 1 /**
 2      * Creates a work-stealing thread pool using all
 3      * {@link Runtime#availableProcessors available processors}
 4      * as its target parallelism level.
 5      * @return the newly created thread pool
 6      * @see #newWorkStealingPool(int)
 7      * @since 1.8
 8      */
 9     public static ExecutorService newWorkStealingPool() {
10         return new ForkJoinPool
11             (Runtime.getRuntime().availableProcessors(),
12              ForkJoinPool.defaultForkJoinWorkerThreadFactory,
13              null, true);
14     }

  实际上Runtime.getRuntime().availableProcessors()获取CPU是集合,那么就开启几个线程来执行(通常默认为JVM可用的处理器个数)。

  技术分享图片

  看到还有另外一个ForkJoinPool.defaultForkJoinWorkerThreadFactory,源码是这样的:

 1 /**
 2   * Default ForkJoinWorkerThreadFactory implementation; creates a
 3   * new ForkJoinWorkerThread.
 4   */
 5   static final class DefaultForkJoinWorkerThreadFactory
 6         implements ForkJoinWorkerThreadFactory {
 7         public final ForkJoinWorkerThread newThread(ForkJoinPool pool) {
 8             return new ForkJoinWorkerThread(pool);
 9         }
10     }

  结合其他源码看起来ForkJoinPool:

  1.初始化了一个线程池ForkJoinWorkerThread[parallelism..

  2.初始化了一个任务队列submissionQueue[8]。

 --->每天进步一点!!!<---

java多线程(一)

标签:ESS   queue   dfa   处理   提交   线程池   cal   lis   creates   

原文地址:https://www.cnblogs.com/award/p/10087925.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!