java手动线程池使用_Java手动配置线程池过程详解

线程池中,常见有涉及到的:

ExecutorService executorService = Executors.newSingleThreadExecutor();

ExecutorService executorService1 = Executors.newCachedThreadPool();

ExecutorService executorService2 = Executors.newFixedThreadPool(3);

关于Executors和ExecutorService从记忆上类似于Collections和List。

但是以上几种其实不建议使用。最好可以通过自己手动配置ThreadPoolExecutor的形式。

我先创建一个demo:

ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(

2,

5,

1L,

TimeUnit.SECONDS,

new ArrayBlockingQueue(3),

Executors.defaultThreadFactory(),

new ThreadPoolExecutor.AbortPolicy()

);

涉及7个参数,按顺序分别是

int corePoolSize,

int maximumPoolSize,

long keepAliveTime,

TimeUnit unit,

BlockingQueue workQueue,

ThreadFactory threadFactory,

RejectedExecutionHandler handler

具体我首先需要结合参数解释下线程池的执行原理:

画了张图:

13qqsusspuz.jpg

如果我用银行办理业务示例说明如下:

1、首先银行里面有两个柜台,这就是核心线程数(7大参数之一)。

2、然后随着客户的增加,可能这个两个柜台满了,然后就要请用户到等候区里面进行等待。这个等候区就是相当于阻塞队列(七大参数之一)。

3、然后紧接着客户越来越多,连阻塞队列都撑不住了,这个时候,就要请求,上面的领导进行多增加柜台的操作,这个时候,可能加了三个柜台,现在就有5个柜台了。这个时候最大的线程数(七大参数之一)就是5了。

4、但是这个时候可能客户又越来越多,这个时候新加的柜台也受不了,就要开始有拒绝策略了(七大参数之一)

5、然后过了一段时间,慢慢的,客户越来越少了,这个时候,发现渐渐的,柜台空余出来了。KeepAliveTime(七大参数之一,加上单位,合计两个参数)指当线程数大于核心线程数时,此为终止前多余的空闲线程等待新任务的最长时间。

6、还有一个参数是工厂,这个我们不做深入研究,直接用默认的工厂即可。

懂得原理以后,我们可以查看下,为什么最好不要直接用,比如:

Executors.newFixedThreadPool(3);

这个的主要原因就是这里面默认队列的最大值是Integer的最大值。

6adbe2fdf9fb66a3d27800eed64fa842.png

e9bc944109d20cacfca6292eeda01c34.png

所以我们生产中需要自己配置线程池。因为默认队列的长度太长了,有可能会导致oom。就是内存炸掉了。

这个在阿里的编程思想里面也有说明这一点:

o4kklujili1.jpg

这边我们探讨下,拒绝策略。4种策略。就是所有柜台和等候区全部满了。会如何处理。

用非常easy的代码来过下,这块的内容:

1、AbortPolicy

import java.util.concurrent.*;

public class VolatileTest {

public static void main(String[] args) throws Exception {

ExecutorService executorService = new ThreadPoolExecutor(

2,

5,

1L,

TimeUnit.SECONDS,

new ArrayBlockingQueue(3),

Executors.defaultThreadFactory(), new ThreadPoolExecutor.AbortPolicy()

);

try {

for (int i = 0; i < 9; i++) {

executorService.execute(new Runnable() {

@Override

public void run() {

System.out.println(Thread.currentThread().getName()+"\t"+"办理业务");

}

});

}

} catch (Exception e) {

e.printStackTrace();

} finally {

}

}

}

yokopzcxput.jpg

可以看到如果超出的话直接挂了,阻止正常运行。

2、CallerRunsPolicy

输出

f93af138cc2b591ebaf1cd4abd0896b5.png

发现有一个退回main线程,被main线程处理。即会把任务退回至调用者。

3、DiscardOldestPolicy

这个将会等待时间最久的任务丢掉。

4、DiscardPolicy

多出来的任务会全部丢掉。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持聚米学院。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/489034.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BZOJ 1492: [NOI2007]货币兑换Cash [CDQ分治 斜率优化DP]

传送门 题意&#xff1a;不想写... 扔链接就跑 好吧我回来了 首先发现每次兑换一定是全部兑换&#xff0c;因为你兑换说明有利可图&#xff0c;是为了后面的某一天两种卷的汇率差别明显而兑换 那么一定拿全利啊&#xff0c;一定比多天的组合好 $f[i]$表示第$i$天最多能得到的钱…

集水井盖板图集07fj02_【干货】住宅通病详细图集(图文详解)

工序节点1建筑物外墙与散水坡、台阶、明沟留沉降缝图示&#xff1a;要求与做法&#xff1a;1、散水坡、台阶、明沟本身按≤6m长度(总长度均分)留沉降缝。2、外墙阴阳角位按450角留沉降缝。3、散水坡与台阶交接处留沉降缝分隔。工序节点2室外地面 伸缩缝图示&#xff1a;要求与…

最新发布!北京市机器人产业创新发展行动方案(2019-2022) “5432”推动北京机器人产业高质量发展...

来源&#xff1a;机器人大讲堂各有关单位&#xff1a;为贯彻《北京市加快科技创新发展智能装备产业的指导意见》&#xff0c;推动北京市机器人产业高质量发展&#xff0c;现将《北京市机器人产业创新发展行动方案&#xff08;2019—2022年&#xff09;》印发给你们&#xff0c;…

php png 输出,PHP直接输出一张图片代码写法

示例代码&#xff1a;public function img(){$img "https://file.zyku.net/p/b197f42c06ffff2e03bfbacee4ce94c4.jpg";$info getimagesize($img);$imgExt image_type_to_extension($info[2], false); //获取文件后缀$fun "imagecreatefrom{$imgExt}";$…

判别分析分为r型和q型吗_电流互感器天天见,但是你真正了解和知道它的一些注意事项吗?...

电流互感器也许你天天见&#xff0c;但是你真正了解电流互感器和它的一些注意事项吗&#xff1f;今天我就带大家一步步分析下电流互感器。一&#xff0c;定义&#xff0c;什么是电流互感器&#xff1f;电流互感器是根据电磁感应原理将一次侧大电流转换成二次侧小电流来测量或计…

刚刚,Science发布2019十大科学突破!

来源&#xff1a;中国生物技术网 北京时间12月20日&#xff0c;《Science》公布了今年的十大突破。“直视”黑洞图片来源&#xff1a;UNIVERSITY OF ARIZONA/INSTITUTE FOR ADVANCED STUDY图片来源&#xff1a;EHT COLLABORATION/CC 4.0巨大的、无处不在的黑洞&#xff0c;在某…

nginx php分离,nginx-php配置动静分离

实验目的&#xff1a;nginx-php配置动静分离实验环境&#xff1a;主机 192.168.88.100 NGINX服务器主机 192.168.88.102 PHP和MYSQL服务器注意&#xff1a;想要手工编译必须安装gcc gcc-c make 这三个插件并且关闭防火墙service firewalld stopsystemctl disable firewalld1.在…

模仿u-boot的makefile结构

u-boot&#xff08;2014.04&#xff09;是通过顶层makefile调用各子目录中的makefile来实现整个工程的编译的&#xff0c;实际上子目录的makefile是include进来的。这里仿照这种结构写个模板测试一下。 目录结构&#xff1a; mytest&#xff1a; add&#xff1a; mul&#xff1…

我国机器视觉企业体量偏小,上游零部件占利润大头

来源&#xff1a;仪商网根据中国机器视觉产业联盟(CMVU)调查统计&#xff0c;目前进入中国市场的国际机器视觉企业和中国本土的机器视觉企业(不包括代理商)都已经超过200家&#xff0c;产品代理商超过300家&#xff0c;专业的机器视觉系统集成商超过70家&#xff0c;覆盖全产业…

php 后端 轻量 框架,GitHub - 22cloud/mixphp: 轻量 PHP 框架,基于 Swoole 的常驻内存型 PHP 高性能框架 (开发文档完善)...

高性能 • 轻量级 • 命令行MixPHP 是什么MixPHP 秉承 "普及 PHP 常驻内存型解决方案&#xff0c;促进 PHP 往更后端发展" 的理念而创造&#xff0c;采用 Swoole 扩展作为底层引擎&#xff0c;围绕常驻内存的方式而设计&#xff0c;提供了 Web / Console 开发所需的众…

技术面试问项目难题如何解决的_技术创新 | 降本增效,青海农信社项目小伙刻苦钻研解决联合支架设计难题!...

革新READ随着建筑技术的进步&#xff0c;建筑内部功能和机电系统越来越多样&#xff0c;带来机电管线的数量成倍增加。为节约建筑空间&#xff0c;提高建筑净高&#xff0c;保证系统功能&#xff0c;提升履约品质&#xff0c;越来越多的项目选择采用联合支架的形式将各类管线集…

AI研究过于集中狭隘,我们是不是该反思了?

来源&#xff1a;AI科技大本营译者 | 陆离编辑 | 夕颜【导读】2019年是AI领域更加冷静的一年&#xff0c;少了些喧嚣和泡沫&#xff0c;大浪淘沙留下的是经过检验的真正的AI研究者、实践者。但是你也许没有发现&#xff0c;本来被寄予厚望要解决一切“疑难杂症”的AI&#xff0…

svchost占用内存过高_是什么导致你的Java服务器内存和CPU占用过高呢

一、内存占用过高1、造成服务器内存占用过高只有两种情况&#xff1a;内存溢出或内存泄漏(1)内存溢出&#xff1a;程序分配的内存超出物理内存的大小&#xff0c;导致无法继续分配物理内存&#xff0c;出现OOM报错。(2)内存泄漏&#xff1a;不再调用的对象一直占用着内存不释放…

Even Three is Odd

题意&#xff1a; 问题是对于所有的长度为n&#xff0c;且$1<ai<n$的整数序列求 $\prod_{i1}^{n-2}{max \{w_i,w_{i1},w_{i2}}\}$ 之和。 解法&#xff1a; 首先设dp状态为 $f(i,j,k)$ &#xff0c;长度为$i3$的&#xff0c;最大值为k&#xff0c;且最大值出现的位置集合…

中国图书评论协会2019年度“中国好书”

来源&#xff1a;腾讯网2019.12.16第1127次推送为读者发现好书&#xff0c;为好书寻找读者。“中国好书”月榜由我国权威的图书评测机构中国图书评论学会发布&#xff0c;志达书店经整理编辑&#xff0c;为您呈现“中国好书”2019年度榜单&#xff08;1-10月&#xff09;。寒假…

a标签居中 img vue,让html img图片垂直居中的三种方法

三种让img元素图片在盒子内垂直居中的方式教程&#xff0c;依据代码与文章教程熟习掌握并加以应用。一、使用flex完成垂直居中操纵css flex实现垂直居中。flex或许不是完成垂直居中最好的选择&#xff0c;由于IE8,9其实不赞成它。那时&#xff0c;为了用flex实现垂直居中&#…

python——面向对象相关

其他相关 一、isinstance(obj, cls) 检查是否obj是否是类 cls 的对象 123456class Foo(object):passobj Foo()isinstance(obj, Foo)二、issubclass(sub, super) 检查sub类是否是 super 类的派生类 1234567class Foo(object):passclass Bar(Foo):passissubclass(Bar, Foo)三、异…

德国工业4.0眼里“工业互联网”与“智能制造”

来源&#xff1a;智造智库工业4.0在德国被认为是第四次工业革命&#xff0c;主要是指&#xff0c;在“智能工厂”利用“智能备”将“智能物料”生产成为“智能产品”&#xff0c;整个过程贯穿以“网络协同”&#xff0c;从而提升生产效率&#xff0c;缩短生产周期&#xff0c;降…

php 正则匹配静态资源,Struts2 配置静态资源文件不经过Strut处理(正则匹配)

Struts2框架有两个核心配置文件&#xff1a;struts.xml和Struts2默认属性文件default.properties(在struts2-core-2.3.20.jar中)default.properties可以通过自己在classpath下写一个struts.properties文件进行定制改写为什么是struts.properties&#xff0c;这可以看org.apache…

全球数字孪生市场大预测:2025 年的 358 亿美元,年复合增长率(CAGR)高达 37.8%...

来源&#xff1a;云头条 数字孪生市场估计将从2019年的38亿美元猛增到2025年的358亿美元&#xff0c;年复合增长率&#xff08;CAGR&#xff09;高达37.8%。推动数字孪生需求增长的几个因素包括&#xff1a;越来越广泛地采用物联网和云计算之类的技术用于实施数字孪生&#xff…