项目中创建多线程时,使用常见的三种线程池创建方式,单一、可变、定长都有一定问题,原因是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);

阿里代码规约:手动创建线程池,效果会更好哦相关推荐

  1. 手动创建线程池 效果会更好_创建更好的,可访问的焦点效果

    手动创建线程池 效果会更好 Most browsers has their own default, outline style for the :focus psuedo-class. 大多数浏览器 ...

  2. 手动创建线程池,效果会更好哦

    今天在回顾线程池的创建时,使用Executors创建线程池报错了,出现了以下问题:手动创建线程池,效果会更好哦. 查阅了阿里巴巴Java开发手册 回顾一下,通过ThreadPoolExecutor来创 ...

  3. 手把手教你手动创建线程池

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:2020,搞个 Mac 玩玩!个人原创+1博客:点击前往,查看更多 作者:IamHYN 链接:https://s ...

  4. Java_Java多线程_Java线程池核心参数 与 手动创建线程池

    参考文章: 1.浅谈线程池ThreadPoolExecutor核心参数 https://www.cnblogs.com/stupid-chan/p/9991307.html 2.Java线程池 Thr ...

  5. 阿里内部禁用Executors创建线程池,为什么?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 何甜甜在吗 来源 | http://rrd.m ...

  6. 阿里为什么禁用Executors创建线程池?

    作者 | 何甜甜在吗 来源 | http://rrd.me/eUh6V 看阿里巴巴开发手册并发编程这块有一条:线程池不允许使用Executors去创建,而是通过ThreadPoolExecutor的方 ...

  7. 阿里面试官鬼得很,问我为什么他们阿里要禁用Executors创建线程池?

    作者:何甜甜在吗 来源:http://rrd.me/eUh6V 看阿里巴巴开发手册并发编程这块有一条:线程池不允许使用Executors去创建,而是通过ThreadPoolExecutor的方式,通过 ...

  8. 为什么阿里Java规约禁止使用Java内置Executors创建线程池?

    IDEA导入阿里规约插件,当你这样写代码时,插件就会自动监测出来,并给你红线提醒. 告诉你手动创建线程池,效果会更好. 在探秘原因之前我们要先了解一下线程池 ThreadPoolExecutor 都有 ...

  9. 面试突击32:为什么创建线程池一定要用ThreadPoolExecutor?

    Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/cou ...

最新文章

  1. [luogu2576 SCOI2010] 幸运数字 (容斥原理)
  2. 用递归合并两个排序的链表
  3. wxWidgets:wxRecursionGuard类用法
  4. AXI_03 AXI_LITE_SLAVE_IP核设计与验证
  5. php内核介绍及扩展开发指南,4.5. 发布扩展信息
  6. android人脸识别的背景图_Android 图片人脸识别剪切
  7. python内置类型方法_python基础(一)内置类型及方法
  8. python往mysql存入数据_Python向mysql存入数据出错.
  9. t–sql pl–sql_SQL Server –在T-SQL中使用最低的度量单位
  10. 机器学习专项练习笔记(持续更新)
  11. python入门经典100题
  12. 百度富文本编辑器UEditor增加自定义字体
  13. Golang系列(四)之面向接口编程
  14. Hudi(12):Hudi集成Flink之sql-client方式
  15. Linux下安装hadoop的步骤
  16. FL Studio20.9安装汉化版水果下载教程
  17. Python 将.py转换为.exe详解
  18. 【五六七人口普查】省市两级分年龄、性别的人口
  19. 基于Spring boot+freemarker+Mysql实现的玩具企业官网项目源码
  20. Unity NavMeshAgent参数及API

热门文章

  1. 记一次服务器故障带来的网站降权恢复记录
  2. nginx+flume网络流量日志实时数据分析实战
  3. PVE7.2-3直通独显 nvidia 1080ti
  4. 春秋航空航班查询API
  5. CAD中一个图形的多种画法
  6. 计算机基础知识对程序员来说有多重要?
  7. R语言︱函数使用技巧(循环、if族/for、switch、repeat、ifelse、stopifnot)
  8. Matlab机器人的仿真(八):绘制机器人运动轨迹(复现)
  9. android 生成aar文件,Android 中.aar文件生成方法与用法
  10. 使用jq简单实现导航栏切换对应展现内容