阿里代码规约:手动创建线程池,效果会更好哦
项目中创建多线程时,使用常见的三种线程池创建方式,单一、可变、定长都有一定问题,原因是FixedThreadPool和SingleThreadExecutor底层都是用LinkedBlockingQueue实现的,这个队列最大长度为Integer.MAX_VALUE,容易导致OOM。所以实际生产一般自己通过ThreadPoolExecutor的7个参数,自定义线程池:
ExecutorService threadPool=new ThreadPoolExecutor(2,5,1L,TimeUnit.SECONDS,new LinkedBlockingQueue<>(3),Executors.defaultThreadFactory(),new ThreadPoolExecutor.AbortPolicy());
一、创建线程池的7个参数
1、corePoolSize线程池的核心线程数
2、maximumPoolSize能容纳的最大线程数
3、keepAliveTime空闲线程存活时间
4、unit 存活的时间单位
5、workQueue 存放提交但未执行任务的队列
6、threadFactory 创建线程的工厂类
7、handler 等待队列满后的拒绝策略
使用线程池时,阿里巴巴P3C代码规约插件将提示:
手动创建线程池--不允许Executors.newFixedThreadPool创建线程池
线程池
static ExecutorService taskExe = Executors.newFixedThreadPool(10);
二、规避资源耗尽的风险,生产上的推荐解法:
import com.google.common.util.concurrent.ThreadFactoryBuilder;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.TimeUnit;
//引入依赖包,创建线程池
private ThreadFactory namedThreadFactory = new ThreadFactoryBuilder().setNameFormat("thread-call-runner-%d").build();
private ExecutorService taskExe = new ThreadPoolExecutor(10,20,200L,TimeUnit.MILLISECONDS,new LinkedBlockingQueue<Runnable>(),namedThreadFactory);
阿里代码规约:手动创建线程池,效果会更好哦相关推荐
- 手动创建线程池 效果会更好_创建更好的,可访问的焦点效果
手动创建线程池 效果会更好 Most browsers has their own default, outline style for the :focus psuedo-class. 大多数浏览器 ...
- 手动创建线程池,效果会更好哦
今天在回顾线程池的创建时,使用Executors创建线程池报错了,出现了以下问题:手动创建线程池,效果会更好哦. 查阅了阿里巴巴Java开发手册 回顾一下,通过ThreadPoolExecutor来创 ...
- 手把手教你手动创建线程池
点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:2020,搞个 Mac 玩玩!个人原创+1博客:点击前往,查看更多 作者:IamHYN 链接:https://s ...
- Java_Java多线程_Java线程池核心参数 与 手动创建线程池
参考文章: 1.浅谈线程池ThreadPoolExecutor核心参数 https://www.cnblogs.com/stupid-chan/p/9991307.html 2.Java线程池 Thr ...
- 阿里内部禁用Executors创建线程池,为什么?
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 何甜甜在吗 来源 | http://rrd.m ...
- 阿里为什么禁用Executors创建线程池?
作者 | 何甜甜在吗 来源 | http://rrd.me/eUh6V 看阿里巴巴开发手册并发编程这块有一条:线程池不允许使用Executors去创建,而是通过ThreadPoolExecutor的方 ...
- 阿里面试官鬼得很,问我为什么他们阿里要禁用Executors创建线程池?
作者:何甜甜在吗 来源:http://rrd.me/eUh6V 看阿里巴巴开发手册并发编程这块有一条:线程池不允许使用Executors去创建,而是通过ThreadPoolExecutor的方式,通过 ...
- 为什么阿里Java规约禁止使用Java内置Executors创建线程池?
IDEA导入阿里规约插件,当你这样写代码时,插件就会自动监测出来,并给你红线提醒. 告诉你手动创建线程池,效果会更好. 在探秘原因之前我们要先了解一下线程池 ThreadPoolExecutor 都有 ...
- 面试突击32:为什么创建线程池一定要用ThreadPoolExecutor?
Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/cou ...
最新文章
- [luogu2576 SCOI2010] 幸运数字 (容斥原理)
- 用递归合并两个排序的链表
- wxWidgets:wxRecursionGuard类用法
- AXI_03 AXI_LITE_SLAVE_IP核设计与验证
- php内核介绍及扩展开发指南,4.5. 发布扩展信息
- android人脸识别的背景图_Android 图片人脸识别剪切
- python内置类型方法_python基础(一)内置类型及方法
- python往mysql存入数据_Python向mysql存入数据出错.
- t–sql pl–sql_SQL Server –在T-SQL中使用最低的度量单位
- 机器学习专项练习笔记(持续更新)
- python入门经典100题
- 百度富文本编辑器UEditor增加自定义字体
- Golang系列(四)之面向接口编程
- Hudi(12):Hudi集成Flink之sql-client方式
- Linux下安装hadoop的步骤
- FL Studio20.9安装汉化版水果下载教程
- Python 将.py转换为.exe详解
- 【五六七人口普查】省市两级分年龄、性别的人口
- 基于Spring boot+freemarker+Mysql实现的玩具企业官网项目源码
- Unity NavMeshAgent参数及API