java多线程之Executor框架线程池详细介绍与ThreadPoolExecutor

Executor框架简介

Executor框架的结构

Executor框架主要由3大部分组成:

  • 任务: 包括被执行的任务需要实现的接口:Runable 接口、Callable接口;
  • 任务的执行: 包括任务执行机制的核心接口Executor,以及继承自Executor的ExecutorService接口。Executor框架有两个关键类实现了ExecutorService接口:ThreadPoolExecutor 和 ScheduledThreadPoolExecutor、ForkJoinPool;
  • 任务的异步计算结果: 包括Future接口和实现Future接口的FutureTask类、ForkJoinTask类。

Executor框架的成员介绍

1、Runnable接口 和 Callable接口

  Runnable接口和Callable接口的实现类,都可以被ThreadPoolExecutor或Scheduled-
ThreadPoolExecutor执行。它们之间的区别是Runnable不会返回结果,而Callable可以返回结
果。
  除了可以自己创建实现Callable接口的对象外,还可以使用工厂类Executors来把一个
Runnable包装成一个Callable。

2、Executor、ExecutorService、AbstractExecutorService、ScheduledExecutorService
  • Executor 接口: 是Executor框架的基础,它将任务的提交与任务的执行分离开来。
  • ExecutorService 接口: 扩展了Executor接口,提供了管理终止的方法(shutdown( ) ,etc),以及可为跟踪一个或多个异步任务执行状况而生成 Future 的方法。
  • AbstractExecutorService 类: 提供 ExecutorService 执行方法的默认实现。
  • ScheduledExecutorService 接口: 一个特殊的 ExecutorService,提供了 可安排在给定的延迟后运行或定期执行的命令。
3、ThreadPoolExecutor

  ThreadPoolExecutor通常使用工厂类Executors来创建。Executors可以创建3种类型的ThreadPoolExecutor:SingleThreadExecutor、FixedThreadPool和CachedThreadPool。
以下是这三种线程池的应用场景说明:

  FixedThreadPool适用于为了满足资源管理的需求,而需要限制当前线程数量的应用场
景,它适用于负载比较重的服务器。

    • SingleThreadExecutor适用于需要保证顺序地执行各个任务;并且在任意时间点,不会有多
      个线程是活动的应用场景。
    • CachedThreadPool是大小无界的线程池,适用于执行很多的短期异步任务的小程序,或者
      是负载较轻的服务器

4、ScheduledThreadPoolExecutor

  ScheduledThreadPoolExecutor通常使用工厂类Executors来创建。Executors可以创建2种类
型的ScheduledThreadPoolExecutor,如下。

    • ScheduledThreadPoolExecutor:包含若干个线程的ScheduledThreadPoolExecutor。
    • SingleThreadScheduledExecutor:只包含一个线程的ScheduledThreadPoolExecutor。

原文地址:https://www.cnblogs.com/heqiyoujing/p/11180104.html

时间: 2024-10-08 08:23:40

java多线程之Executor框架线程池详细介绍与ThreadPoolExecutor的相关文章

戏(细)说Executor框架线程池任务执行全过程(下)

上一篇文章中通过引入的一个例子介绍了在Executor框架下,提交一个任务的过程,这个过程就像我们老大的老大要找个老大来执行一个任务那样简单.并通过剖析ExecutorService的一种经典实现ThreadPoolExecutor来分析接收任务的主要逻辑,发现ThreadPoolExecutor的工作思路和我们带项目的老大的工作思路完全一致.在本文中我们将继续后面的步骤,着重描述下任务执行的过程和任务执行结果获取的过程.会很容易发现,这个过程我们更加熟悉,因为正是每天我们工作的过程.除了Thr

戏(细)说Executor框架线程池任务执行全过程(上)

一.前言 1.5后引入的Executor框架的最大优点是把任务的提交和执行解耦.要执行任务的人只需把Task描述清楚,然后提交即可.这个Task是怎么被执行的,被谁执行的,什么时候执行的,提交的人就不用关心了.具体点讲,提交一个Callable对象给ExecutorService(如最常用的线程池ThreadPoolExecutor),将得到一个Future对象,调用Future对象的get方法等待执行结果就好了. 经过这样的封装,对于使用者来说,提交任务获取结果的过程大大简化,调用者直接从提交

java多线程之Executor 与 ExecutorService两个基本接口

一.Executor 接口简介 Executor接口是Executor框架的一个最基本的接口,Executor框架的大部分类都直接或间接地实现了此接口. 只有一个方法 void execute(Runnable command): 在未来某个时间执行给定的命令.该命令可能在新的线程.已入池的线程或者正调用的线程中执行,这由 Executor 实现决定. public interface Executor { /** * Executes the given command at some tim

Java多线程学习(八)线程池与Executor 框架

Java面试通关手册(Java学习指南,欢迎Star,会一直完善下去,欢迎建议和指导):https://github.com/Snailclimb/Java_Guide 历史优质文章推荐: Java并发编程指南专栏 分布式系统的经典基础理论 可能是最漂亮的Spring事务管理详解 面试中关于Java虚拟机(jvm)的问题看这篇就够了 目录: [TOC] 本节思维导图: 思维导图源文件+思维导图软件关注微信公众号:"Java面试通关手册" 回复关键字:"Java多线程"

java多线程之Future和FutureTask

Executor框架使用Runnable 作为其基本的任务表示形式.Runnable是一种有局限性的抽象,然后可以写入日志,或者共享的数据结构,但是他不能返回一个值. 许多任务实际上都是存在延迟计算的:执行数据库查询,从网络上获取资源,或者某个复杂耗时的计算.对于这种任务,Callable是一个更好的抽象,他能返回一个值,并可能抛出一个异常.Future表示一个任务的周期,并提供了相应的方法来判断是否已经完成或者取消,以及获取任务的结果和取消任务. public interface Callab

Java多线程之Callable接口与Runnable的实现以及选择

通过实现Runnable接口的实现 package Thread; import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors; public class RunnableThreadDemo { private static int POOL_NUM = 30; // 线程池数量 public static void main(String[] args) throws Interrupte

Java多线程之DaemonThreadFactory

通过DaemonThreadFactory创建后台线程池 另外:如果是后台线程创建的线程,将都是后台线程. package wzh.daemon; import java.util.concurrent.ThreadFactory; public class DaemonThreadFactory implements ThreadFactory { @Override public Thread newThread(Runnable r) { Thread t = new Thread(r);

[Java Concurrency in Practice]第八章 线程池的使用

线程池的使用 8.1 在任务与执行策略之间的隐性耦合 虽然Executor框架为制定和修改执行策略提供了相当大的灵活性,但并非所有的任务都能适用所有的执行策略.有些类型的任务需要明确地执行执行策略,包括: 1. 依赖性任务:当线程池中运行任务都是独立的时,我们可以随意地修改池的长度与配置,这不会影响到性能以外的任何事情.但如果你提交到线程池中的任务依赖于其他的任务,这就会隐式地给执行策略带来了约束. 2. 非安全性任务:如果即使一个任务有线程安全性问题,只要它在单线程的环境下运行是不会有问题,如

javade多任务处理之Executors框架(线程池)实现的内置几种方式与两种基本自定义方式

一 Executors框架(线程池) 主要是解决开发人员进行线程的有效控制,原理可以看jdk源码,主要是由java.uitl.concurrent.ThreadPoolExecutor类实现的,这里只列出简单用法 根据Executors可以创建不同功能的线程池,主要有四种: 1 newFixedThreadPool : 返回一个固定数量的线程池,并且池中数量一致保持不变,有任务时如果有空闲线程则立即执行,没有就暂时存放到队列等待空闲线程 //创建一个有10个线程的线程池,任务多于10个会一直等待