线程池
文章平均质量分 91
zy苦行僧
这个作者很懒,什么都没留下…
展开
-
细数线程池五大坑,一不小心线上就崩了
系统性能优化的几种常用手段是异步和缓存。因此我们常常使用线程池异步处理一些业务。线程池的使用还是相对比较简单的,首先创建一个线程池,然后通过execute或submit执行任务。但魔鬼往往藏于细节之中,稍有不慎就会出错。本文将会详细总结线程池容易出错的五大坑一、拒绝策略参数知多少二、拒绝策略使用不当,系统阻塞不可用三、多任务get()异常时,结果获取有误四、ThreadLocal与线程池搭配使用,上下文缺失五、父子任务共用同一线程池,系统“饥饿”死锁以下为线程池的核心流程【具体内容参原创 2021-11-02 10:00:00 · 633 阅读 · 0 评论 -
线程池系列三:动态修改线程池队列大小
线程池中的队列要求的是阻塞队列,作用主要是当线程池处理任务能力不足时,队列存储多余的任务,从而起到削峰和缓冲的目的。可以选择的队列种类很多,如何选择合适的队列应用到自己的线程池中?就需要了解他们的优缺点,从而择优使用1、常见阻塞队列常见的阻塞队列都是以基于BlockingQueue的实现ArrayBlockingQueue一个基于数组结构的有界阻塞队列,此队列按 FIFO(先进先出)原则对元素进行排序。LinkedBlockingQueue一个基于链表结构的有界阻塞队列(不设置大小时,默认原创 2021-10-25 22:37:05 · 4967 阅读 · 0 评论 -
线程池系列二:一张动图,彻底懂了execute和submit
目录1、为线程池提交任务2、流程分解我们知道线程池通过execute方法执行提交的Runnable任务,但Runnable只是执行任务,没有返回任何信息。【线程池原理:线程池原来是个外包公司,打工人我悟了】若是我们想在异步执行完任务后能够拿到结果。怎么处理呢?我们可以借助Callable来回去返回结果。线程池为我们提供了另外一种方式执行任务,即submit方法1、为线程池提交任务 execute方法执行Runnable任务 .原创 2021-10-23 15:24:52 · 408 阅读 · 0 评论 -
线程池系列一:线程池原来是个外包公司,打工人我悟了
这里写自定义目录标题原创 2021-10-23 15:23:59 · 109 阅读 · 0 评论 -
实战 | 线程池的几种自定义扩展
下图为线程池的构造方法,我们可以自定义一些功能实现项目优化1、预先启动核心线程this.prestartAllCoreThreads();使用方式:自定义线程池的构造方法中调用作用:当真正任务被执行时,可以减少创建线程带来的性能损耗2、自定义线程池线程工厂官方提供的默认线程池工厂为Executors.defaultThreadFactory();我们可以仿照进行自定义扩展线程工厂,增加一些个性化功能。如下图所示,我们自定义线程池线程工厂时可以附加很多功能。1、定制化线程池内线程名称,便原创 2021-10-29 09:30:00 · 231 阅读 · 0 评论