「涨知识」一篇文章让你了解Java核心线程池

本篇文章通读时间大概3分钟,希望在三分钟内的讲解,对你有所帮助,一定要认真看并思考,好了。废话不多数,直接上干货,本节内容我们讲的是Java的线程池,在讲之前我们首先看一下有哪些线程池,这些线程池我们不过多讲解,因为我们的关注点是他们是如何实现的,和其运行的原理。

目录

常用线程池列表

ThreadPoolExecutor

ThreadFactory线程工厂

RejectedExecutionHandler拒绝策略

Queue任务队列

一. 常用线程池列表

这部分内容,只是帮助你回顾一下线程池的知识,大家重点看方法内的实现

1、构造一个固定线程数目的线程池,配置的corePoolSize与maximumPoolSize大小相同,同时使用了一个无界LinkedBlockingQueue存放阻塞任务,因此多余的任务将存在再阻塞队列,不会由RejectedExecutionHandler处理

2、构造一个缓冲功能的线程池,配置corePoolSize=0,maximumPoolSize=Integer.MAX_VALUE,keepAliveTime=60s,以及一个无容量的阻塞队列 SynchronousQueue,因此任务提交之后,将会创建新的线程执行;线程空闲超过60s将会销毁

3、构造一个只支持一个线程的线程池,配置corePoolSize=maximumPoolSize=1,无界阻塞队列LinkedBlockingQueue;保证任务由一个线程串行执行

4、构造有定时功能的线程池,配置corePoolSize,无界延迟阻塞队列DelayedWorkQueue;有意思的是:maximumPoolSize=Integer.MAX_VALUE,由于DelayedWorkQueue是无界队列,所以这个值是没有意义的

的内容,知识帮助你回顾一下

二. ThreadPoolExecutor

相信大家从上面的众多线程池中都已经看到了这个类,因为上面的线程池底层的构造都是由这个类创建的,

那么我们就开始研究这个类

首先看一下构造方法,关于注释一定要好好看,每个参数都理解了,那么你就弄懂了

1. 核心的线程池

2. 最大线程池就是说你定义的线程池运行创建的最大线程数量

3. 空闲时间回收,当这个时间后还没有任务执行就将线程回收

4. 单位,控制上面时间的单位,可以为秒,或者分钟

5. 核心线程都已经去执行任务但是,任务还有,那么久先放到这个队列里,就相当于集合

6. 创建线程用户的线程工厂,里面只有一个方法就是newThread,你可以自定义线程名

7. 拒绝策略,当任务已经执行不了,你拒绝的策略

上面的文字可能你看的不太明白,小编这里画了一个图,大家仔细看看

三. ThreadFactory

ThreadFactory有什么用呢? 其实就是一个接口,既然是线程工厂,那么肯定就是创建线程的了

接口就是这么简单,那么我们在开发中到底有什么实际用处呢? 下面是小编写的一个线程工厂,主要是在创建线程的时候

给当前线程分配名字和线程组方便控制。读到这里,有没有一点启发呢?

四. 拒绝策略

拒绝策略就是任务实在是已经执行不了,那么就需要你告诉程序,怎么样去拒绝在执行其他任务

ThreadPoolExecutor类里面是内置了4中拒绝策略,我们一个一个来分析

策略-1

用于被拒绝任务的处理程序,它直接在 execute 方法的调用线程中运行被拒绝的任务;如果执行程序已关闭,则会丢弃该任务。如下:

策略-2

直接抛出异常

策略-3

什么都不做直接丢弃

策略-4

从任务队列中移除最早的一个,然后将拒绝的任务重新执行

到这里拒绝策略就说完了,应该都明白了吧,下面我们说下实际中会怎么用。

如果在任务不是特别多特别重要的情境下,可以在执行拒绝策略发送一个通知事件,通知相关的人查看。

比如以下这种

但是当任务特别重要的时候,比如说银行处理用户的转账信息更新事物的任务时候,那么这个任务就比较重要了,不可能用这种的,这种对数据要求高的我们都是用Elastic-Job,这种分布式任务处理框架,任务会首先落数据库,然后从数据库中批量读取任务执行。感兴趣的童鞋可以下去自行了解。

五. 任务队列

扩展点知识,队列再次,小编不对队列进行讲解,只提到,感兴趣的童鞋下去在深入研究

Queue:

分为阻塞队列和非阻塞队里

阻塞队列一共有四套方法分别用来进行insert、remove和examine,当每套方法对应的操作不能马上执行时会有不同的反应,下面这个表格就分类列出了这些方法:

ThrowsException:如果操作不能马上进行,则抛出异常

SpecialValue:如果操作不能马上进行,将会返回一个特殊的值,一般是true或者false

Blocks:如果操作不能马上进行,操作会被阻塞

TimesOut:如果操作不能马上进行,操作会被阻塞指定的时间,如果指定时间没执行,则返回一个特殊值,一般是true或者false 需要注意的是,我们不能向BlockingQueue中插入null,否则会报NullPointerException。

LinkedBlockingQueue 无边界队里

PriorityBlockingQueue 排序队列,内部会排序但是要实现排序接口

SynchronousQueue 同步队列

ArrayBlockingQueue 阻塞队里,内不是数组,有边界

DelayQueue 延迟队里

好了,时间不早了,小编要休息了! 今天的课程到此。 喜欢的童鞋请点击关注,谢谢你的支持。由于工作的原因一直没有发博客,都是整理在笔记上,近期会整理后发出。 没有任何广告,纯粹分析技术,一起共同成长进步。

1. Java线程池深度讲解(也就是本文)

2. OVAL验证框架使用

3. ThreadLocal线程隔离深度讲解(包含Thread源码讲解,父子本地空间继承和线程池隔离,最后会讲解阿里TransmittableThreadLocal底层实现原理)

4. 分布式锁对比(zookeeper锁和基于redis分布式锁)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,287评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,346评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,277评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,132评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,147评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,106评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,019评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,862评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,301评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,521评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,682评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,405评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,996评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,651评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,803评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,674评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,563评论 2 352

推荐阅读更多精彩内容

  • 为什么使用线程池 当我们在使用线程时,如果每次需要一个线程时都去创建一个线程,这样实现起来很简单,但是会有一个问题...
    闽越布衣阅读 4,286评论 10 45
  • 原文出处http://cmsblogs.com/ 『chenssy』 作为Executor框架中最核心的类,Thr...
    踩在浪花上看浪阅读 1,227评论 0 4
  • 告别是一种心情,告别也是一种决定。 每一次的告别,都有一个故事,或激情燃烧,或凄美动人,或惊心动魄。 告别不是遗忘...
    爱笑的鱼521阅读 225评论 0 0
  • 那些被辜负的 是你放不下的自我 窗外的沙沙声 是梦里不眠的小树林 多少日日夜夜 你以为的并不在这里 无论如何 都到...
    夏天的糖阅读 153评论 0 0
  • 你还在犹豫什么,小孩都在学习编程,不然未来没有你的落脚之地。一技傍身,学习php软件编程,让自己不落伍,不失业,适...
    编程那些事阅读 197评论 0 0