Java并发核心四Executor 与 ThreadPoolExecutor

Posted 快乐菠菜

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java并发核心四Executor 与 ThreadPoolExecutor相关的知识,希望对你有一定的参考价值。

Executor ThreadPoolExecutor 实现的是线程池,主要作用是支持高并发的访问处理。

Executor 是一个接口,与线程池有关的大部分类都实现了此接口。

ExecutorService 是 Executor 的子接口;AbstractExecutorService 是 ExecutorService 的实现类,但是是抽象类。

ThreadPoolExecutor 是 AbstractExecutorService 的子类,可实例化。

Executors 是一个工厂类,用于创建线程池。

1、Executors 的 使用:

  (1) newCachedThreadPool()  返回 ExecutorService 实例,创建无界限线程池,理论上线程最大个数是 Integer.MAX_VALUE,使用举例:

     final SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
        ExecutorService executorService = Executors.newCachedThreadPool();
        // 此线程池运行5个线程
        for (int i = 0; i < 5; i++) {
            final int index = i;
            executorService.execute(new Runnable() {
                @Override
                public void run() {
                    System.out.println("Thread-" + index + "-begin-" + sf.format(new Date()));
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println("Thread-" + index + "-end-" + sf.format(new Date()));
                }
            });
        }

  运行结果:

  

  从上图可以看出,线程在execute 加载后,基本是并发执行的,并非顺序执行。

  (2) newFixedThreadPool(int)  返回 ExecutorService 实例,创建的是有界线线程池,即线程个数可以指定最大数量,如果超过最大数量,则后加入的线程需要等待。

    还有api:newFixedThreadPool(int , ThreadFactory),newCachedThreadPool( ThreadFactory ) 方法同理。

  (3) newSingleThreadExecutor() 创建单一线程池,实现以队列的方式来执行任务。

 2、ThreadPoolExecutor 的使用:

  Executors 工厂类中,很多地方是调用的 ThreadPoolExecutor 来实现的,单独调用 ThreadPoolExecutor 要考虑的相对要多一些但也更灵活。

以上是关于Java并发核心四Executor 与 ThreadPoolExecutor的主要内容,如果未能解决你的问题,请参考以下文章

深入浅出Java并发编程指南「难点 - 核心 - 遗漏」让我们一起探索一下CompletionService的技术原理和使用指南

Java 并发Executor框架机制与线程池配置使用

转:Java并发编程之十九:并发新特性—Executor框架与线程池(含代码)

Java线程与并发编程实践----并发工具类与Executor框架

Day841.Executor与线程池-Java 并发编程实战