[Java]线程池理解

作为一个程序员,平时关于线程也是使用的肯定很频繁,举个例子开启无数线程跑的同时就好像一个没有红绿灯的十字路口无数的汽车在通行,结局可想而知,而本文就是介绍多线程的管理者ThreadPoolExecutor线程池。

java多线程池的支持——ThreadPoolExecutor

线程池工作流程图理解

ThreadPoolExecture实现原理

Step1:调用execute方法创建新线程,首先检查CorePool 核心线程数量,如果少于CorePoolSize则去创建新的线程,反之则进入Step2

Step2:CoolPool内线程数量已满,则将线程加入BlockingQueue(等待队列)如果BlockingQueue已满则进入Step3

Step3:如果池中的线程数量大于CorePoolSize,BlockingQueue已满,并且

1.线程池中数量小于corepoolsize,则创建新线程去执行任务

2.线程池中数量等于corepoolsize,通过handler指定的策略来处理此任务,优先级:核心线程coopoolsize,任务队列workqueue,最大线程maximumPoolSize,三者都满了之后,使用handler处理被拒绝的任务

3.线程池中数量大于corepoolsize,如果某个线程执行完空闲时间超过keepAliveTime的时间该线程将被终止,线程池调整池中线程数

关于线程池的构造方法:

publicThreadPoolExecutor(intcorePoolSize,intmaximumPoolSize,longkeepAliveTime,

    TimeUnit unit,BlockingQueue workQueue,ThreadFactory     threadFactory,RejectedExecutionHandler handler) {

        if(corePoolSize <0|| maximumPoolSize<=0||maximumPoolSize< corePoolSize ||   keepAliveTime <0)throw newIllegalArgumentException();

       if(workQueue ==null|| threadFactory ==null|| handler ==null)throw newNullPointerException();

       this.corePoolSize= corePoolSize;

       this.maximumPoolSize=maximumPoolSize;

       this.workQueue= workQueue;

       this.keepAliveTime= unit.toNanos(keepAliveTime);

       this.threadFactory= threadFactory;

       this.handler= handler;

}


构造方法参数解释

corePoolSize  线程池核心线程数量

maximumPoolSize 线程池最大容量大小

keepAliveTime  线程池维护线程的空闲时间

TimeUnit unit时间单位

BlockingQueue workQueue  等待队列

ThreadFactory  线程工厂

RejectedExecutionHandler 拒绝策略

对于一些参数的理解:

关于blockQueue:

1.ArrayBlockingQueue      有界队列,基于数据结构的数组类型等待队列,先进先出,newArrayBlockingQueue(?) ?定义队列长度。

2.LinkedBlockingQueue    无界队列,基于链表结构的等待队列,先进先出,吞吐量大于ArrayBlockingQueue。

3.syncchronousQueue     直接提交,一个不存储元素的工作阻塞队列,前一个线程对象不调用移除操作完全移除之后,后一个线程将一直处于阻塞状态即前一个任务完成之后才会执行下一个任务,吞吐量大于LinkedBlockingQueue,Executors.newCachedThreadPool使用了此阻塞队列

4.priorityQueue                一个具有无限优先级的阻塞队列

关于threadfactory

创建线程的工厂

关于拒绝策略rejectedExecutionHandler

当队列和线程池都满了,说明线程池处于饱和状态,这时候我们需要通过handler执行拒绝策略,无法处理新建线程时向执行。四种策略:

1.ThreadPoolExecutor.AbortPolicy:丢弃任务并抛出RejectedExecutionException异常。

2.ThreadPoolExecutor.DiscardPolicy:也是丢弃任务,但是不抛出异常。

3.ThreadPoolExecutor.DiscardOldestPolicy:丢弃队列最前面的任务,然后重新尝试执行任务(重复此过程)

4.ThreadPoolExecutor.CallerRunsPolicy:由调用线程处理该任务

启动线程池

一个线程任务通过ThreadPool.excute(new Runnable)添加执行。任务执行的方法就是Runnable对象的run方法,使用excute适用于提交不需要返回值的任务,当需要提交返回值的任务时需要使用submit()方法。

关闭线程池

原理:遍历线程池中的所有工作线程,然后调用线程的interrupt方法终止线程,所以无法响应中断的线程将永远无法停止。

1.shutdownnow

将线程职为STOP状态,然后尝试停止所有正在执行或者短暂暂停的线程,并返回正在等待的任务队列。

2.shutdown

将线程置为SHUTDOWN状态,然后中断所有没有正在执行的工作线程。

关于介绍暂时到这边,后续继续努力!

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

推荐阅读更多精彩内容