首页 > 其他分享 >详解ExecutorService 和 Executors

详解ExecutorService 和 Executors

时间:2024-04-01 22:59:45浏览次数:22  
标签:Executors 创建 submit 详解 线程 ExecutorService ThreadPoolExecutor

代码示例:

  • ExecutorService 表⽰⼀个线程池实例.
  • Executors 是⼀个⼯⼚类, 能够创建出⼏种不同⻛格的线程池.

ExecutorService 的 submit ⽅法能够向线程池中提交若⼲个任务.

ExecutorService pool = Executors.newFixedThreadPool(10);
    pool.submit(new Runnable() {
        @Override
        public void run() {
            System.out.println("hello");
        }
    });

Executors 创建线程池的⼏种⽅式

  • newFixedThreadPool: 创建固定线程数的线程池
  • newCachedThreadPool: 创建线程数⽬动态增⻓的线程池.
  • newSingleThreadExecutor: 创建只包含单个线程的线程池.
  • newScheduledThreadPool: 设定 延迟时间后执⾏命令,或者定期执⾏命令. 是进阶版的 Timer.

Executors 本质上是 ThreadPoolExecutor 类的封装 

ThreadPoolExecutor 

ThreadPoolExecutor 提供了更多的可选参数, 可以进⼀步细化线程池⾏为的设定.  

ThreadPoolExecutor 的构造⽅法

把创建⼀个线程池想象成开个公司. 每个员⼯相当于⼀个线程 

  • corePoolSize: 正式员⼯的数量. (正式员⼯, ⼀旦录⽤, 永不辞退)
  • maximumPoolSize: 正式员⼯ + 临时⼯的数⽬. (临时⼯: ⼀段时间不⼲活, 就被辞退).
  • keepAliveTime: 临时⼯允许的空闲时间.
  • unit: keepaliveTime 的时间单位, 是秒, 分钟, 还是其他值.
  • workQueue: 传递任务的阻塞队列
  • threadFactory: 创建线程的⼯⼚, 参与具体的创建线程⼯作.

RejectedExecutionHandler: 拒绝策略, 如果任务量超出公司的负荷了接下来怎么处理.

  • AbortPolicy(): 超过负荷, 直接抛出异常.
  • CallerRunsPolicy(): 调⽤者负责处理
  • DiscardOldestPolicy(): 丢弃队列中最⽼的任务.
  • DiscardPolicy(): 丢弃新来的任务

 线程池的工作流程

标签:Executors,创建,submit,详解,线程,ExecutorService,ThreadPoolExecutor
From: https://blog.csdn.net/2201_75437633/article/details/137249569

相关文章

  • C++ 数学函数、头文件及布尔类型详解
    C++数学C++有许多函数可以让您在数字上执行数学任务。最大值和最小值max(x,y)函数可用于找到x和y的最大值:示例cout<<max(5,10);而min(x,y)函数可用于找到x和y的最小值:示例cout<<min(5,10);C++<cmath>头文件其他函数,例如sqrt(平方根)、round(四舍......
  • 详解 Protobuf 以及在 Go 中如何使用 gRPC
    什么是RPC?RPC指的是远程过程调用(RemoteProcedureCall),简单理解就是一个节点请求另一个节点提供的服务。假设有两台服务器A和B,一个部署在A服务器上的应用,想要调用B服务器上某个应用提供的函数/方法。但由于不在同一个内存空间,所以不能直接调用,而是需要通过网络来表达......
  • C++命名空间详解
    在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。#include<st......
  • Hive详解(5)
    Hive窗口函数案例需求:连续三天登陆的用户数据步骤:--建表createtablelogins( usernamestring, log_datestring)rowformatdelimitedfieldsterminatedby'';--加载数据loaddatalocalinpath'/opt/hive_data/login'intotablelogins;--......
  • 掌握ADB:详解操作命令及完整用法指南(二)
    前言ADB,全名AndroidDebugBridge,是Android提供的一个通用的调试工具,是一个C/S架构的命令行工具,通过这个工具,使得我们的PC能够和Android设备来进行通信。之前一篇文章我们介绍了adb安装以及一些adb的基础命令,本文我们将介绍一些我们在进行app自动化测试时经常使用到的命令。adb......
  • JMeter前置处理器-Beanshell前置处理器详解
    前言在JMeter中,前置处理器用于在发送HTTP请求之前执行特定的操作。Beanshell前置处理器是一种非常强大的前置处理器,它允许您使用Java语言编写脚本来实现各种复杂的逻辑。本文将介绍如何使用Beanshell前置处理器来执行自定义操作以增强性能测试。什么是Beanshell前置处理器?Bean......
  • HttpServlet详解
    Servlet与HttpServlet详解一、Servlet概述Servlet(ServerApplet)是JavaServletAPI中定义的一个接口,用于扩展Web服务器的功能。Servlet是一个运行在Web服务器或应用服务器上的Java程序,它可以动态地生成Web页面或其他类型的响应。二、HttpServlet类HttpServlet类是JavaServlet......
  • Django 中集成 CKEditor 富文本编辑器详解
    Django中集成CKEditor富文本编辑器详解原文链接:https://blog.csdn.net/Rocky006/article/details/135130010概要在Web应用中,富文本编辑器是提高用户体验的重要组件之一。CKEditor是一款流行的、功能丰富的富文本编辑器。在Django项目中集成CKEditor不仅可以提升内容......
  • 设计模式详解:适配器模式
    什么是适配器模式?在程序设计中,经常会存在一种情况:现有的程序无法直接使用,需要做适当的变换才能使用。而用于填补“现有程序”和“所需程序”之间差异的设计模式就是适配器模式(Adapter)。 不理解?没关系,跟你分享一个生活中的例子!我们在使用笔记本电脑时通常会插上电源,难道......
  • 苹果开发者账号注册及证书生成方法详解
    转载:注册苹果开发者账号的方法在2020年以前,注册苹果开发者账号后,就可以生成证书。但2020年后,因为注册苹果开发者账号需要使用AppleDeveloperapp注册开发者账号,所以需要缴费才能创建ios证书了。所以新政策出来后,注册苹果开发者账号,并缴费成为苹果开发者,才能手工创建证书......