当前位置:首页 > Java程序 > 正文内容

java线程池oom(java线程池核心线程数设置)

abcsky883个月前 (02-09)Java程序92

今天给各位分享

前言前文JAVA中的阻塞队列和非阻塞队列我们介绍了常用的几种队列,队列的使用很广泛,特别是一些需要生产消费模式的场景以及需要对全局的集合进行操作的场景今天我们来讲讲其中的一种应用——线程池有三种常见的创建线程的方法:继承Thread类、实现Runnable接口和实现Callable接口。

java线程池oom(java线程池核心线程数设置)

这些线程在运行结束后都会被虚拟机销毁,如果线程数量多的话,频繁的创建和销毁线程会大大浪费时间和效率更重要的是浪费内存,当线程执行完毕后死亡,线程对象就变成垃圾,造成GC的频繁收集和停顿我们使用线程池来解决这个问题,让线程运行完不立即销毁,并且重复使用,继续执行其他的任务。

使用线程池来管理线程,一方引流推广活动面使线程的创建更加规范,可以合理控制开辟线程的数量;另一方面线程的细节管理交给线程池处理,优化了资源的开销核心类在java.util.concurrent包中我们能找到线程池的定义,其中ThreadPoolExecutor是我们线程池的核心类,我们先看下构造函数。

构造函数的参数含义:corePoolSize:指定了线程池中的线程数量,它的数量决定了添加的任务是开辟新的线程去执行,还是放到workQueue任务队列中去;maximumPoolSize:指定了线程池中的最大线程数量,这个参数会根据你使用的workQueue任务队列的类型,决定线程池会开辟的最大线程数量;

keepAliveTime:引流推广活动当线程池中空闲线程数量超过corePoolSize时,多余的线程会在多长时间内被销毁;unit:keepAliveTime的单位;workQueue:存放提交的任务,实现队列的方式有:

BlockingQueue、LinkedBlockingQueue、SynchronousQueue、SynchronousQueue等,关于队列的选择要根据实际情况来确定;threadFactory:线程工厂,用于创建线程,一般用默认即可;

handler:拒绝策略;创建线程时,为了防止资源被耗尽,任务队列都会选择创建有界任务队列,但这种模式下如果出现队列已满且线程池创建的线程数达到最大的线程数时,就需要用拒绝策引流推广活动略来处理线程池“超载”的情况。

jdk默认的处理方式是AbortPolicy,抛出异常阻止程序(除非是安全性要求极高,否则在大并发情况下使用这种做法不是很明智);DiscardPolicy,丢弃无法处理的任务;DiscardOledesPolicy

,也是丢弃任务,只不过丢弃的是队列最先被添加进去,马上要执行的任务;CallerRunsPolicy,由调用者所在线程来运行任务除了使用jdk提供的这四种策略之外,我们还可以通过实现RejectExecutionHandler。

来自定义拒绝策略。一般流程图:

当线程池中线程数小于corePoolSize时,新提交的任务将创建一个新线程执行任务,即使此时线引流推广活动程池中存在空闲线程;当线程池中线程数达到corePoolSize时,新提交任务将被放入workQueue中,等待线程池中任务调度执行 ;

当workQueue已满,且maximumPoolSize > corePoolSize时,新提交任务会创建新线程执行任务;当workQueue已满,且提交任务数超过maximumPoolSize,任务由RejectedExecutionHandler处理;

当线程池中线程数超过corePoolSize,且超过这部分的空闲时间达到keepAliveTime时,回收这些线程;当设置allowCoreThreadTimeOut(true)时,线程池中corePool引流推广活动Size范围内的线程空闲时间达到keepAliveTime也将回收。

提交线程池

两种方式的区别:execute没有返回值,如果不需要知道线程的结果就使用execute方法,性能比较好;submit返回一个Future对象如果想知道线程结果就使用submit提交,而且它能在主线程中通过Future的get方法捕获线程中的异常。

关闭线程池

两种方式的区别:shutdown不再接受新的任务,之前提交的任务等执行结束再关闭线程池;shutdownNow不再接受新的任务,试图停止池中的任务在关闭线程池,返回所有未处理的线程List列表总结线程池主要用来解决线程生命周期开销问题和资源不足问题。

通过对多个任务重引流推广活动复使用线程,线程创建的开销就被分摊到多个任务上,而且由于在请求到达时线程已经存在,所以消除线程创建所带来的延迟这样,就可以立即为请求服务,使应用程序响应更快另外,通过适当的调整线程中的线程数目可以防止出现资源不足。

举报/反馈

扫描二维码推送至手机访问。

版权声明:本文由海南拓宏网络科技工作室发布,如需转载请注明出处。

本文链接:http://4blc.com/post/15970.html

分享给朋友:

“java线程池oom(java线程池核心线程数设置)” 的相关文章

西安艺术生文化课培训机构哪个好(西安艺考文化课培训学校机构排名)

本文分享给大家的是: 目前,一些艺术生还在进行专业课集训,但是有许多学生家长已经在给孩子咨询文化课补习的事情了,2023年西安市艺考文化课集训学校已经在招生了,西安艺考文化课集训学校怎么选呢?小编归纳总结了选择艺考培训机构的方法: 选择艺考培训机构方法一:通过安全靠谱的平台...

冒死潜入某个外包公司获得的珍贵Java基础笔试题(附答案)

今天给各位分享 前言大家好,我是程序员manor,上次货拉拉面试太打击心情,于是我决定找些小boss打打让自己愉悦起来,于是就有了下面这篇Java基础面试笔试题, 文章末尾给出答案 JAVA基础笔试题目一、单选题( 共8题,每题2分 )1、下列语句哪一个正确( )A. Ja...

java基础题库及答案(java基础知识面试题)

本篇文章给大家谈谈 许多人在找Java程序员的相关工作时,好不容易收到了面试邀约,却对面试官要问什么问题一无所知,最终白白失去了机会,为了防止这样的情况发生,“好程序员”特意为大家整理汇总了十道经典Java面试题,让你在面试时做到有备无患。 1、面向对象的特征有哪些方面?答...

计算机科学与技术是什么专业干什么的(计算机科学与技术是学什么呢)

本篇文章给大家谈谈 计算机科学与技术也叫做CS专业,顾名思义,是学习计算机相关的科学原理和专业技术的一门学科那么它和其他计算机专业,如软件工程、网络工程、信息管理与系统专业等有什么不同呢?我自己也是计算机科学与技术专业的,所以我深有体会在踏入这个专业之前,大家的一些疑惑,下面我就为...

字节和腾讯的offer(字节回应腾讯副总裁)

本文分享给大家的是: 985/211 学历可能在其他行业中优势巨大,但是在互联网技术行业,做后台、前端、测试、运维、大数据等,本科学历是大厂门槛,哪怕你是二本、三本学生,只要是本科起步,加上正确的打法,就有机会进来二本、非科班学生关键是没有这个意识,走技术方向没有进大厂的意识,没有...

史上最全java面试题(java面试基础题目)

本文分享给大家的是: 大家好,我是 Guide 哥,一个三观比主角还正的技术人两个星期前,我和我的好朋友决定做一系列的 Java 知识点常见重要问题的小册小册的标准就一个,那就是:取精华,取重点每一本小册,我们都会充分关注我们所总结的知识点是否达到这个标准。 昨天晚上终于把...