笔记来源:Java入门基础视频教程,java零基础自学就选黑马程序员Java入门教程
一、线程池概述
概念:
(资料图片)
线程池就是一个可以复用线程的技术。
不适用线程池的问题:
如果用户每发起一个请求,后台就创建一个新线程来处理,下次新任务来了又要创建新线程,而创建新线程的开销是很大的,这样会严重影响系统的性能。
工作原理:
线程池通过提供固定的核心线程(工作线程WorkThread)和任务队列(WorkQueue)来工作,当核心线程都在忙时,新来的任务进入任务队列,等待核心线程的处理。
二、线程池实现的API、参数说明
JDK5.0起提供了代表线程池的接口,ExecutorService。
ExcutorService常用方法:
void execute(Runnable command):执行任务/命令,没有返回值,一般用来执行Runnable任务。
Future<T> submit(Callable<T> task):执行任务,返回未来任务对象获取线程结果,一般拿来执行Callable任务。
void submit():等任务执行完毕后关闭线程池。
List<Runnable> shutdownNow():立刻关闭,停止正在执行的任务,并返回队列中未执行的任务。
如何得到一个线程池对象:
方式一:使用ExecutorService的实现类ThreadPoolExecutor自创建一个线程池对象。
ThreadPoolExecutor构造器的参数说明:
指定线程池的线程数量(核心线程):corePoolSize,不能小于0。
指定线程池可支持的最大线程数:maximumPoolSize,最大数量>=核心线程数量。
指定临时线程的最大存活时间:keepAliveTime,不能小于0。
指定存活时间的单位(秒、分、时、天):unit,时间单位。
指定任务队列:workQueue,不能为null。
指定用哪个线程工厂创建线程:threadFactory,不能为null。
指定线程忙,任务满时,新任务来了怎么办:handler,不能为null。
方式二:使用Executors(线程池的工具类)调用方法返回不同特点的线程池对象。
Executors的底层也是基于线程池的实现类ThreadPoolExecutor创建线程池对象的。
Executors得到线程池对象的常用方法:
public static ExecutorService newCachedThreadPool():线程数量随着任务增加而增加,如果线程任务执行完毕且空闲了一段时间则会被回收掉。
public static ExecutorService newFixedThreadPool(int nThreads):创建固定线程数量的线程池,如果某个线程因为执行异常而结束,那么线程池会补充一个新线程替代它。
public static ExecutorService newStringThreadExecutor():创建只有一个线程的线程池对象,如果该线程出现异常而结束,那么线程池会补充一个新线程。
public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize):创建一个线程池,可以实现在给定的延迟后运行任务,或者定期执行任务。
Executors使用可能存在的陷阱:
大型并发系统环境中使用Executors如果不注意可能会出现系统风险。
可能会出现OOM错误(Java.lang.OutOfMemoryError)。
三、线程池处理Runnable任务
ThreadPoolExecutor创建线程池对象:
新任务拒绝策略:
ThreadPoolExecutor.AbortPolicy:丢弃任务并抛出RejectedExecutionException异常,是默认的策略。
ThreadPoolExecutor.DiscardPolicy:丢弃任务,但是不抛出异常,这是不推荐的做法。
ThreadPoolExecutor.DiscardOldestPolicy:抛弃队列中等待最久的任务,然后把当前任务加入队列中。
ThreadPoolExecutor.CallerRunsPolicy:由主线程负责调用任务的run()方法从而绕过线程池直接执行。
给一个任务给线程池处理:
四、线程池处理Callable任务
五、线程池常见面试题
临时线程什么时候创建?
新任务提交时发现核心线程都在忙,任务队列也满了,并且还可以创建临时线程,此时才会创建临时线程。
什么时候会开始拒绝任务?
核心线程和临时线程都在忙,任务队列也满了,新的任务过来的时候才会开始任务拒绝。
标签:
-
后端 | Java | 线程池 环球快看点
笔记来源:Java入门基础视频教程,java零基础自学就选黑马程序员Java入
-
枸杞银耳莲子粥_关于枸杞银耳莲子粥概略 热点在线
1、枸杞银耳莲子粥是一道甜粥品,制作原料主要有稻米、银耳、莲子等。
-
理想汽车发布城市NOA:不依赖高精地图 驾驶技术接近人类司机_世界播资讯
快科技6月17日消息,理想汽车于今日举办首个“家庭科技日”,在公布完8
-
班级纪侓保证书报告 头条
班级纪侓保证书报告(精选3篇)班级纪侓保证书报告篇1为了进一步规范学
-
看懂宋仲基频繁晒二婚妻子,才懂他为何与宋慧乔离婚-热门
宋仲基自与宋惠乔离婚之后,很快便宣布了二婚消息,并频繁高调地晒照片
-
天天简讯:秦伐韩王召廉颇而问曰:可救不出自_秦伐韩
1、小题1:B小题2:B小题3:B小题4:(1)这段路险阻绵长,(要去救援)就好
-
洗衣机自己在家怎么清洗?这些方法会了,在家自己就可清理
洗衣机不用再花钱清理,这些方法会了,在家自己就可清理人类进步之后,
-
世界视点!江苏省仪征市发布暴雨蓝色预警
仪征市气象台2023年06月17日17时33分发布暴雨蓝色预警信号:预计今天上
-
今日学弈的出处是哪里_学弈出自哪里_环球通讯
1、《学弈》选自《孟子·告子》弈秋,通国之善弈者也。2、使弈秋诲二人
-
全国首家家纺家居类目直播电商闭环载体落户南通川姜 最新消息
承接家纺升级使命,为时代家纺开辟新篇章。6月16日,南通市通州区直播
-
1849年发生了什么事情(1849年发生了什么大事)
来为大家解答以下的问题,849年发生了什么事情,1849年发生了什么大事
-
李梦:WNBA的中国库里?命中4个三分球刷新纪录_天天聚看点
WNBA常规赛继续进行,华盛顿神秘人队在一场激动人心的比赛中战胜了菲尼
-
环球热消息:泰拉瑞亚太阳石刷不出来_泰拉瑞亚太阳石
1、和月亮石合成天体石。2、天体石大大提升拥有白天和晚上的属性。本文
-
2023年端午档大盘预售总票房突破1000万元
据灯塔专业版实时数据,截至6月17日15时37分,2023年端午档(6月22日-6
-
【世界独家】杭州亚运会筹备渐入冲刺期 场馆实战测试“模拟考”进行中
杭州亚运会、亚残运会共有56个比赛场馆,分布在主办城市杭州及协办城市
-
微信聊天记录还原 ,被删的微信聊天记录,可以恢复了?-焦点要闻
微信作为一款国民级应用,几乎每一部智能手机都会安装,而且微信总是喜
-
厄德高:努力不关注曼城庆祝活动 阿森纳无缘冠军很痛苦_每日报道
队内伤病的影响,以及曼城状态的爆发,这一分差很快被缩小,随后阿森纳
-
前沿资讯!丝蕴洗发水效果好不好(丝蕴洗发水效果怎么样)
小科来为大家解答以上问题。丝蕴洗发水效果好不好,丝蕴洗发水效果怎么
-
深圳多个区推出新一轮购车补贴
深圳市坪山区16日启动第二轮新能源小汽车促消费活动,补贴金额8000万元
-
立减200元:绿联12合1立式扩展坞开启618促销,到手价1089元 环球聚焦
IT之家6月17日消息,绿联12合1立式多功能扩展坞现已上架电商平台开启61
-
何氏眼科眼基因研究院落户博鳌乐城|要闻速递
原标题:何氏眼科眼基因研究院落户博鳌乐城点击查看视频新海南客户端、
-
本场比赛也预示国足正式开启新一届世预赛的准备
国足将在热身赛中主场迎战缅甸队。上半场张琳芃首开纪录,林良铭扩大比
-
中国家长的教育方式英语作文(中国家长的教育方式)_快消息
来为大家解答以下的问题,国家长的教育方式英语作文,中国家长的教育方
-
每日消息!鲍大楚_关于鲍大楚简述
小伙伴们,你们好,今天小夏来聊聊一篇关于鲍大楚,关于鲍大楚简述的文
-
今日热讯:英特尔亮相2023开放原子全球开源峰会:秉持全栈软件开放战略,助推科技创新
在数字时代的今天,面对日益复杂的应用场景和业务发展需求,开源已经成
-
即时焦点:三角洲特种部队黑鹰坠落_三角洲特种部队8
1、实际名称:三角洲特种部队:极限作战2。本文到此分享完毕,希望对大家
-
XR艾为电:6月16日融券净卖出3.32万股,连续3日累计净卖出4.09万股
6月16日,XR艾为电(688798)融资买入565 29万元,融资偿还531 5万元,
-
很饱的一天-世界观察
1 根本不是什么策略题,只是为了叙述方便如此表达了罢。这是高中
-
武汉洪山区应急局:两名井下作业工人被沼气熏倒,抢救无效死亡|环球简讯
情况通报6月16日下午,长征二路两名井下作业工人不幸身亡。经查,当天
-
每日视点!时差计算题及答案_时差计算
1、时标网络的六时计算,最复杂的应该属总时差了。2、请看定义:总时差