【Java并发】Executor框架

版权声明:转载请注明出处: https://blog.csdn.net/qq_21687635/article/details/84716302

Executor框架结构

  1. 任务。包括被执行任务需要实现的接口:Runnable接口或Callable接口。
  2. 任务的执行。任务执行机制的核心接口Executor,以及继承Executor的ExecutorService接口,以及实现了ExecutorService接口的两个关键类:ThreadPoolExecutor和ScheduledThreadPoolExecutor
  3. 异步计算的结果。包括接口Future和实现Future接口的FutureTask类。

ThreadPoolExecutor

FixedThreadPool

    public static ExecutorService newFixedThreadPool(int nThreads) {
        return new ThreadPoolExecutor(nThreads, nThreads,
                                      0L, TimeUnit.MILLISECONDS,
                                      new LinkedBlockingQueue<Runnable>());
    }

LinkedBlockingQueue是无界队列,使用无界队列会带来如下影响:

  1. 当线程池的线程数达到corePoolSize后,新任务将在无界队列中等待,因此线程池中的线程数不会超过corePoolSize。
  2. 由于1,使用无界队列时maximumPoolSize将是一个无效参数
  3. 由于1,使用无界队列时keepAliveTime将是一个无效参数
  4. 由于使用无界队列,RejectedExecutionHandler将是一个无效参数

SingleThreadExecutor

    public static ExecutorService newSingleThreadExecutor() {
        return new FinalizableDelegatedExecutorService
            (new ThreadPoolExecutor(1, 1,
                                    0L, TimeUnit.MILLISECONDS,
                                    new LinkedBlockingQueue<Runnable>()));
    }

SingleThreadExecutor的corePoolSize和maximumPoolSize都被设置为1。其他参数与FixedThreadPool相同。

newCachedThreadPool

    public static ExecutorService newCachedThreadPool() {
        return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
                                      60L, TimeUnit.SECONDS,
                                      new SynchronousQueue<Runnable>());
    }

corePoolSize为0,maximumPoolSize为无界的,keepAliveTime为60秒,工作队列为没有容量的SynchronousQueue。

ScheduledThreadPoolExecutor

ScheduledThreadPoolExecutor继承自ThreadPoolExecutor。它主要用来给定的延迟之后运行任务,或者定期执行任务。

FutureTask

FutureTask除了实现Future接口外,还实现了Runnable接口。

FutureTask有3种状态:

  1. 未启动。FutureTask.run()方法还没被执行之前。
  2. 已启动。FutureTask.run()方法被执行的过程中。
  3. 已完成。FutureTask.run()方法执行完成后。

FutureTask的get和cancel的执行图如下:
FutureTask的get和cancel的执行图

参考

  1. Java并发编程的艺术[书籍]

猜你喜欢

转载自blog.csdn.net/qq_21687635/article/details/84716302