线程池的五个参数?
corepollsize:核心线程数。
maximumpoolsize:最大线程数。
keepalivetime:空闲线程的保留时间。
timeunit:空闲线程保留时间的单位。
阻塞队列<runnable>:阻塞队列以存储等待执行的任务。
threadfactory:用于创建线程的线程工厂。
rejectedexecutionhandler:队列已满且任务量大于最大线程数时的异常处理策略。
如何优雅的使用和理解线程池?你怎么看?
要理解和使用好java线程池,需要掌握并发编程的基本知识,认真阅读和学习线程池api的所有官方文档。合理使用线程池的要点总结如下:1。例如,您希望将同步api更改为异步,还是希望同时请求多个外部服务,或者减少线程的创建和销毁以处理用户请求。
2.根据您的实际项目需求,配置线程池的参数,包括corepoolsize、maximumpoolsize、blockingqueue、keepalivetime、threadfactory和saturationpolicy(或rejectedexecutionhandler)。
3.根据应用程序的特点部署线程池。一些后台服务应用程序适合在启动时创建线程池,并且在应用程序执行期间不修改线程池。有时,应用程序适合临时创建线程池,将任务提交给它,并在使用后立即销毁它。
4.当您决定不再使用线程池时,应该调用shutdown()来正常关闭线程池。shutdown可以保证以前提交到线程池的任务不会被丢弃,保证了数据的安全性。
5.调用shutdown后,线程池此时可能正在执行任务,但提交任务的条目被关闭。如果需要等待线程池完全终止,则需要调用waitterminate以等待线程池处理队列中的所有任务并清理它们,然后返回。awaitterminate成功返回,线程池被彻底清理。
总之,线程池按创建(构造方法)、提交任务(执行)、关闭和等待清理结束(等待终止)的顺序调用api。只有这样,我们才能优雅地使用线程池。为了更好地利用java线程池并最大限度地提高优化程序的性能,您可以参考我官方帐户中的分析文章。
线程池处理流程是什么?
任务提交后,线程池首先确定线程数是否达到核心池大小。如果未达到线程数,则创建一个核心线程来处理任务;否则,执行下一步;
然后线程池判断任务队列是否已满。如果没有,则将任务添加到任务队列;否则,执行下一步;
然后,由于任务队列已满,线程池将判断线程数是否达到最大值。否则,将创建一个非核心线程来处理该任务;否则,将执行饱和策略,并在默认情况下引发rejectedexecutionexception异常。
原文标题:线程池的四种拒绝策略 线程池的五个参数?,如若转载,请注明出处:https://www.saibowen.com/wenda/24428.html
免责声明:此资讯系转载自合作媒体或互联网其它网站,「赛伯温」登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,文章内容仅供参考。