线程池分享PPT模板课件.pptx

上传人:牧羊曲112 文档编号:1591565 上传时间:2022-12-09 格式:PPTX 页数:32 大小:1.01MB
返回 下载 相关 举报
线程池分享PPT模板课件.pptx_第1页
第1页 / 共32页
线程池分享PPT模板课件.pptx_第2页
第2页 / 共32页
线程池分享PPT模板课件.pptx_第3页
第3页 / 共32页
线程池分享PPT模板课件.pptx_第4页
第4页 / 共32页
线程池分享PPT模板课件.pptx_第5页
第5页 / 共32页
点击查看更多>>
资源描述

《线程池分享PPT模板课件.pptx》由会员分享,可在线阅读,更多相关《线程池分享PPT模板课件.pptx(32页珍藏版)》请在三一办公上搜索。

1、线程池,演讲人,202x-11-11,目录,01.,介绍,07.,workqueue(阻塞队列),03.,threadpoolexecutor,05.,拒绝策略,02.,编码实现,04.,threadpoolexecutor扩展,06.,自定义线程池和拒绝策略,08.,jvm的参数类型,介绍,01,介绍,01,线程池做的工作主要是控制运行的线程的数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最大数量超出的线程排队等候,等其他线程执行完毕,再从队列中取出任务来执行。,是什么,02,他的主要特点为:线程复用;控制最大并发量;管理线程;,特点,03,分支主题,架构说

2、明,编码实现,02,executors.newfixedthreadpool(int); 一池固定处理线程 底层实现 分支主题 newfixedthreadpool():该方法将返回一个固定线程数量的线程池,该线程池的数量将始终不变(核心线程数与最大线程数相等)。当一个线的任务提交时,线程池中若有空闲的线程,则立即执行,否则将会将任务添加到任务队列中,等到线程空闲时,再处理任务队列中的任务,但是由于它采用的阻塞队列是 linkedblockingqueue,是一个最大值很大(integer.max_value)的队列,也可以认为是无界队列,当线程池中的任务处理不及时的时候,而一边又疯狂的提交任

3、务,将会导致oom发生。 适合执行长期的任务,性能好很多 底层实现 分支主题 newFixedThreadPool():该方法将返回一个固定线程数量的线程池,该线程池的数量将始终不变(核心线程数与最大线程数相等)。当一个线的任务提交时,线程池中若有空闲的线程,则立即执行,否则将会将任务添加到任务队列中,等到线程空闲时,再处理任务队列中的任务,但是由于它采用的阻塞队列是 LinkedBlockingQueue,是一个最大值很大(Integer.MAX_VALUE)的队列,也可以认为是无界队列,当线程池中的任务处理不及时的时候,而一边又疯狂的提交任务,将会导致OOM发生。 适合执行长期的任务,性能

4、好很多,编码实现 executors.newsinglethreadexecutor(); 一池一个处理线程 底层实现 newsinglethreadexecutor:可见这个方法,只会创建一个线程的线程池。多余的任务还是会被添加到 linkedblockingqueue中,也会有oom情况的发生。 适合一个任务一个任务得场景 Executors.newSingleThreadExecutor(); 一池一个处理线程 底层实现 newSingleThreadExecutor:可见这个方法,只会创建一个线程的线程池。多余的任务还是会被添加到 LinkedBlockingQueue中,也会有OOM

5、情况的发生。 适合一个任务一个任务得场景,编码实现 executors.newcachedthreadpool(); 一池n个处理线程 底层 newcachedthreadpool:该方法将返回一个可根据实际情况调整的线程数量的线程池,线程池的数量不固定,我们可以看见上面的方法中设置的是corepoolsize为0,maximumpoolsize为整数最大值,保活时间为60秒,阻塞队列为synchronousqueue,故线程池中有空闲线程可以复用的话,则会优先复用空闲线程,如果所有的线程都在工作的话,新的任务提交,直接会创建新的线程处理任务,所有线程处理完任务后,将会返回线程池进行复用。如果

6、同时又大量任务提交,那么将会开启等量的线程,这样也会导致oom。 适合执行很多短期异步的小程序,或者负载较轻的服务器 Executors.newCachedThreadPool(); 一池N个处理线程 底层 newCachedThreadPool:该方法将返回一个可根据实际情况调整的线程数量的线程池,线程池的数量不固定,我们可以看见上面的方法中设置的是corePoolSize为0,maximumPoolSize为整数最大值,保活时间为60秒,阻塞队列为SynchronousQueue,故线程池中有空闲线程可以复用的话,则会优先复用空闲线程,如果所有的线程都在工作的话,新的任务提交,直接会创建新

7、的线程处理任务,所有线程处理完任务后,将会返回线程池进行复用。如果同时又大量任务提交,那么将会开启等量的线程,这样也会导致OOM。 适合执行很多短期异步的小程序,或者负载较轻的服务器,编码实现,executors.newscheduledthreadpool(int);,编码实现,executors.newworkstealingpool();,threadpoolexecutor,03,threadpoolexecutor,七大参数,01,02,03,04,int corepoolsize : 指定了线程池中的常驻的核心线程数量,long keepalivetime : 当线程池线程超过co

8、repoolsize时,多余的空闲线程的存活时间。即,超过了corepoolsize的空间时间,在多长时间被销毁,05,blockingqueue workqueue : 任务队列,被提交但尚未被执行的任务,int maximumpoolsize : 线程池中最大线程数量,timeunit unit : keepalivetime的单位,rejectedexecutionhandler handler : 拒绝策略,当任务太多,来不及处理,如何执行拒绝任务,06,七大参数,threadfactory threadfactory : 线程工厂,用于创建线程,可以利用guava线程工厂,默认也可,

9、threadpoolexecutor,工作原理,原理 分支主题流程 分支主题提交任务后的执行过程 1、判断核心线程池是否已满,如果不是,则创建线程执行任务2、如果核心线程池满了,判断队列是否满了,如果队列没满,将任务放在队列中3、如果队列满了,则判断最大线程池是否已满,如果没满,创建线程执行任务4、如果线程池也满了,则按照拒绝策略对任务进行处理,threadpoolexecutor扩展,04,threadpoolexecutor扩展,beforeexecute:线程池中任务运行前执行afterexecute:线程池中任务运行完毕后执行terminated:线程池退出后执行afterExecut

10、e:线程池中任务运行完毕后执行terminated:线程池退出后执行,拒绝策略,05,拒绝策略,01,02,03,04,abortpolicy (默认): 该策略会直接抛出异常,阻止系统正常工作,discardoldestpolicy : 丢弃最开始的(即将被执行的)任务,并尝试再次提交任务。,callerrunspolicy : 只要线程未关闭,该策略直接调用者线程中执行将被丢弃的任务,这样的话不会真正抛弃任务,但会影响提交线程的性能。(会退给调用者),discardpolicy : 该策略将直接丢弃无法处理的任务,不予任何处理,05,自定义拒绝策略:继承rejectedexecutionh

11、andler接口,重写rejectedexecution方法,自定义线程池和拒绝策略,06,自定义线程池和拒绝策略,实际生产中不用executore初始化线程池,因为底层使用的阻塞队列是无界队列,容易造成oom,cpu密集型io密集型 io密集型的任务不是一直在执行任务,所以尽可能的配多一点cpu核数*2io密集型任务每个线程都会大量的阻塞计算公式:cpu核数/(1-阻塞系数) 阻塞系数 = 0.8 0.9之间IO密集型 IO密集型的任务不是一直在执行任务,所以尽可能的配多一点CPU核数*2IO密集型任务每个线程都会大量的阻塞计算公式:CPU核数/(1-阻塞系数) 阻塞系数 = 0.8 0.9

12、之间,如何合理配置线程,workqueue(阻塞队列),07,workqueue(阻塞队列),是什么分类 arrayblockingqueuelinkedblockingqueuesynchronousqueue分类 ArrayBlockingQueueLinkedBlockingQueueSynchronousQueue,jvm的参数类型,08,jvm的参数类型,标配参数,x 参数(了解),xx 参数,jinfo -flag,参看默认参数,基本参数,jvm的参数类型,标配参数,-version,01,-help,02,jvm的参数类型,x 参数(了解),-xint:解释执行,-xcomp:第

13、一次使用就编译成本地代码,-xmixed:混合模式,jvm的参数类型,xx 参数,boolean 类型:-xx:+ 或者 - 某个属性值(+ 表示开启,- 表示关闭),kv 设置类型:-xx:key=value,b,c,a,查看jvm初始默认值:-xx:+printflagsinitial,查看修改更新:-xx:+printflagsfinal,打印命令行参数(可以看默认垃圾回收器):-xx:+printcommandlineflags,jvm的参数类型,参看默认参数,jvm的参数类型,基本参数,-xmx,02,-xms,01,-xss,03,-xmn,04,-xx:metaspacesize,05,-xx:+printgcdetails,06,jvm的参数类型,基本参数,-xx:survivorratio,-xx:newratio,-xx:maxtenuringthreshold,感谢聆听,2020,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号