10.阻塞队列和线程池

news/2025/2/22 21:37:54/

阻塞队列(BlockQueue)

  • 非阻塞方法
    • add 往满的队列中添加元素会报错
    • remove 从空的队列中移除元素会报错
    • offer 往满的队列中添加元素会返回false
    • poll 从空的队列中移除元素会返回null
  • 阻塞方法
    • put
    • take

使用场景:
阻塞队列通常使用在生产者消费者设计模式当中,生产者不用关心生成的产品由哪个消费者来执行,只需将生产的产品放入队列中,消费者直接从队列中取出产品使用,达到了生产者与消费者之间解耦的目的和性能均衡问题.

常用的阻塞队列有哪些?

  • ArrayBlockQueue 一个由数组结构组成的有界阻塞队列
  • LinkedBlockQueue 一个由链表结构组成的有界阻塞队列
  • PriorityBlockQueue 一个支持优先级排序的无界阻塞队列
  • DelayQueue 一个使用优先级排序的无界阻塞队列
  • SyschronizedQueue 一个不存储元素的阻塞队列
  • LinkedTransferQueue 一个由链表结构组成的无界阻塞队列
  • LinkedBlockQueue 一个由链表结构组成的双向阻塞队列

什么是线程池?为什么要用线程池?
线程池是用来管理线程的.
因为线程的创建、执行和销毁都是需要耗费时间和资源的,所以通过线程池来避免线程的重复创建和销毁

线程池ThreadPoolExecutor(/ɪɡˈzekjətər/)工作机制

  1. 线程池的创建 (各个参数的含义)
    public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler)

  2. 提交任务

    • execute(Runnable) 没有返回值
    • submit(Callable/Runnable) 有返回值,返回Future,最终还是交给execute去执行的
  3. 线程池的关闭

    • showDown 将正在执行的线程以外的线程关闭
    • showDownNow 将正在执行的线程和以外的线程都关闭

线程池中参数的含义

  • corePoolSize 核心线程数,当前可执行线程的数量
  • maximumPoolSize 最大线程数,当阻塞队列存满后,将会创建新的线程来执行任务(执行的任务是当前的任务,而非阻塞队列中的任务)
  • keepAliveTime 控制空闲线程存活时间
  • unit 控制空闲线程存活时间单位(ms、s)
  • workQueue 阻塞队列,如果要执行的线程数超过核心线程数,将会会放在阻塞队列中,阻塞队列存满后,依据最大线程数将会创建新的线程来执行任务
  • threadFactory 对创建线程做一些调节
  • handler 拒绝策略,超出线程池执行能力以外的任务拒绝执行,最多可以执行1100个线程,超过的不予执行

RejectedExecutionHandler(拒绝策略)

  • CallerRunsPolicy
  • AbortHandler 通常默认的拒绝策略是这一个,直接抛出异常
  • DiscardPolicy
  • DiscardOldestPolicy

http://www.ppmy.cn/news/66940.html

相关文章

为什么要用数据库存储数据

使用数据库相比于使用文件或Excel存储数据有以下优势&#xff1a; 1. 数据库具有更好的数据结构和数据管理能力&#xff0c;可以更方便地进行数据的增删改查操作&#xff0c;支持事务处理和数据的完整性约束。 2. 数据库可以支持多用户同时访问和操作同一数据&#xff0c;而文…

Linux基础学习---2、系统管理、帮助命令、文件目录类命令

1、系统管理 1.1 Linux中的进程和服务 计算机中&#xff0c;一个正在执行的程序或命令。被叫做“进程”&#xff08;Process&#xff09;。 启动之后一直存在、常驻内存的进程&#xff0c;一般称做“服务”&#xff08;Service&#xff09;。1.2 systemctl&#xff08;CentOS…

算法小课堂(七)字符串

一、概念 1.1相关概念 0C中有两种字符串表示形式&#xff1a;C风格字符串和string类类型。 C风格字符串是 字符数组使用null字符\0终止的一维字符数组&#xff0c;字符指针是一个指针变量&#xff0c;里面存放一个字符的地址 而string类处理起字符串来会方便很多&#xff0c;完…

unity UGUI系统梳理 -交互组件

概述 unity 中的交互组件可用于处理交互&#xff0c;例如鼠标或触摸事件以及使用键盘或控制器进行的交互 1、按钮 (Button) Button详解 2、开关 (Toggle) Background&#xff1a;背景图片&#xff0c;控制toggle组件的背景颜色改变&#xff0c;从而展示此物体是否被选中的…

月薪低于5千元必看,省钱购物攻略,本人亲测有效

作为资深的网购用户&#xff0c;我不允许我的姐妹们还不知道&#xff0c;网上购物如何省钱&#xff1f;如果你是学生党&#xff0c;或者月薪低于5千元&#xff0c;一定要看一看&#xff01;学会了不但能提升生活品质&#xff0c;还能帮你省下好多钱~ 同样的东西&#xff0c;我…

JavaScript全解析——正则表达式

正则——RegExp ●正则也叫正则表达式&#xff0c;又名 “规则表达式” ●正则是JS中的数据类型, 是一个复杂数据类型 ●由我们自己来书写 “规则”&#xff0c;专门用来检测 字符串 是否符合 “规则” 使用的 ●我们使用一些特殊的字符或者符号定义一个 “规则公式”&#xf…

STL-stack容器和queue容器

stack概念&#xff1a;stack是一种先进后出(First In Last Out,FILO)的数据结构&#xff0c;它只有一个出口 栈中只有顶端的元素才可以被外界使用&#xff0c;因此栈不允许有遍历行为 与queue相似&#xff0c;stack也是一个适配器类&#xff0c;它给底层vector提供了典型的栈接…

cleanmymac在哪下载?中文官网安装教程

CleanMyMac是一个系统清理工具&#xff0c;删除系统缓存文件 , 多余的应用程序语言包 , PowerPc软件运行库等。 是个给你的硬盘瘦身的好工具。 系统&#xff1a;macOS 10.14&#xff08;在10.15以及Big Sur中的安装激活教程相同&#xff09;登录CleanMyMac X下载页面&#xff0…