多线程编程之线程池使用

多线程编程之JAVA线程池多种使用方式

1、基于无界队列

如果corePoolSize == maxmumPoolSize时,等同于使用工具类实现Executors.newFixedThreadPool(corePoolSize )

code 如下:
在这欧典里插入图片描述
优点:队列无限大,任务可以不断写入
缺点:任务不易控制

备注:若执行任务未达到核心线程池数量,线程池则会建立新的线程执行;
若执行任务数量达到核心线程数量,线程池不会创建线程到最大数量。线程池会先判断工作队列 是否已满,如果未满则,将任务插入到队列中;如果工作队列已满,才会再判断是否达到 最大线程数量。若无达到,则创建线程,直至达到最大。最后若最大线程数量小于工作任务数量,则需要设置执行策略处理多出 的任务。


2、基于指定队列大小

code如下:核心线程数量为5,最大线程数为10,等待 队列最大为3
在这里插入图片描述
如果执行任务数量超过8(5+3),则线程池会增加线程,增加5个临时线程,线程数量显示为10

如果执行任务数量超过13(10+3),则会有超出的任务被拒绝,抛出异常

优点:执行任务最大数易控制,控制内存开销
缺点:任务超过最大线程数量(13)时,超出任务会被拒绝,必须指定拒绝策略。若不指定策略,则会抛出默认异常RejectedExecutionException


3、基于SynchronousQueue(缓存线程池)

使用场景:任务数量不容易控制,无法预估,任务有时多,有时少。

SynchronousQueue(同步队列),实际上它不是一个真正的队列,因为它不会为队列中元素维护存储空间。与其他队列不同的是,它维护一组线程,这些线程在等待着把元素加入或移出队列。
在使用SynchronousQueue作为工作队列的前提下,客户端代码向线程池提交任务时,而线程池中又没有空闲的线程能够从SynchronousQueue队列实例中取一个任务,那么相应的offer方法调用就会失败(即任务没有被存入工作队列)。此时,ThreadPoolExecutor会新建一个新的工作者线程用于对这个入队列失败的任务进行处理(假设此时线程池的大小还未达到其最大线程池大小maximumPoolSize)。

code如下:
在这里插入图片描述实现效果等同于:Executors.newCachedThreadPool(),默认的最大线程数量为:Integer.MAX_VALUE。
在实际使用时建议指定最大线程数量,保证系统线程数量可控。

优点:线程数量根据任务数量,建立,缓存。核心线程池数量为0
缺点:线程最大数量最好手动指定


4、基于定时任务

特点:定时执行线程池信息,按照设置的定时时间,执行任务
本质:将任务提交到延时队列中,DelayedWorkerQueue

  4.1、定时任务只执行一次

code如下:
在这里插入图片描述
实现方式等同于:Executors.newScheduledThreadPool()
代码中核心线程数量为5,最大线程数量为:Integer.MAX_VALUE,3s后执行

4.2、定时任务之周期性执行

以任务执行时间为准,不以设置的周期进行执行。如果任务执行时间长于定时任务设置时间,则在执行任务结束后,才可以执行

code如下:
在这里插入图片描述
备注:以上示例为,定时任务执行完成后,立即执行下一次定时任务

在这里插入图片描述
备注:以上示例为,定时任务执行完成后,等待1s钟后,再执行下一次定时任务

5、线程终止

场景一:线程池被终止后,若当前线程池中有正在执行的任务,任务不会被终止,直到执行结束。
但是后续提交的任务,会被拒绝执行

code如下:

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
场景二:线程池被终止后,若有任务正在执行,则任务会被立刻终止。等待的线程不会被执行

在这里插入图片描述
该api会返回未被执行的任务数量。

以上为线程池学习后,个人总结,后续会根据深入了解来不断完善。有错误地方,请指出,感谢

补充完善:

不建议用Executors.newFixedThreadPool(),或者 CachedThreadPool ()进行线程池的创建。

前者实际是创建了一个无界的LinkedBlockingQueue(),当处理任务多,且任务需要较长时间处理时,容易产生oom
后者的线程数量可以理解为无限大,queue并不存储任务,当有任务进来时,会加开线程来处理请求 ,当所有线程占用内存较大时,会产生无法创建线程问题

在这里插入图片描述

线程池工作原理

在这里插入图片描述

线程池简单监控

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值