Java面试必问题22:如何创建线程池(偏重点)创建线程池的注意事项

企业最佳实践:不要使用Executors直接创建线程池,会出现OOM问题,要使用ThreadPoolExecutor构造方法创建,引用自《阿里巴巴开发手册》

【强制】线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式,这 样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险。 说明:Executors 返回的线程池对象的弊端如下: 1) FixedThreadPool 和 SingleThreadPool: 允许的请求队列长度为 Integer.MAX_VALUE,可能会堆积大量的请求,从而导致 OOM。 2) CachedThreadPool: 允许的创建线程数量为 Integer.MAX_VALUE,可能会创建大量的线程,从而导致 OOM。

  1. 创建线程池方式一:new ThreadPoolExecutor 方式
  1. ExecutorService executorService = new ThreadPoolExecutor(3,5,10, TimeUnit.SECONDS,new ArrayBlockingQueue<>(3), Executors.defaultThreadFactory(), new ThreadPoolExecutor.AbortPolicy());
  2. for (int i = 0; i < 9; i++) {
  3.     executorService.execute(()->{
  4.         System.out.println(Thread.currentThread().getName() + "开始办理业务了。。。。。。");
  5.     });
  6. }
  1. 创建线程池方式二:spring的ThreadPoolTaskExecutor方式
  1. @Configuration
  2. public class ExecturConfig {
  3.     @Bean("taskExector")
  4.     public Executor taskExector() {
  5.         ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
  6.         executor.setCorePoolSize(3);//核心池大小
  7.         executor.setMaxPoolSize(5);//最大线程数
  8.         executor.setQueueCapacity(3);//队列长度
  9.         executor.setKeepAliveSeconds(10);//线程空闲时间
  10.         executor.setThreadNamePrefix("tsak-asyn");//线程前缀名称
  11.         executor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy());//配置拒绝策略
  12.         return executor;
  13.     }
  14. }

创建线程池的注意事项:

  1. 线程池的大小:线程池的大小应根据任务的类型和系统资源进行合理的配置。如果线程池的大小过小,可能会导致任务排队等待执行,影响系统的响应性能;如果线程池的大小过大,可能会占用过多的系统资源,导致系统负载过重。可以通过监控和调整线程池的大小来优化性能。
  2. 任务队列的选择:线程池通常会使用一个任务队列来保存待执行的任务。任务队列的选择应根据任务的特性进行合理的选择。如果任务较多且执行时间较短,可以选择无界队列(如LinkedBlockingQueue);如果任务较少且执行时间较长,可以选择有界队列(如ArrayBlockingQueue)或者优先级队列(如PriorityBlockingQueue)。
  3. 线程池的拒绝策略:当任务无法被线程池接收执行时,需要定义适当的拒绝策略。常见的拒绝策略有:抛出异常(AbortPolicy)、丢弃任务(DiscardPolicy)、丢弃最早的任务(DiscardOldestPolicy)和调用者运行任务(CallerRunsPolicy)。根据业务需求选择合适的拒绝策略。
  4. 线程池的生命周期管理:线程池的生命周期包括初始化、执行任务和关闭。在初始化时,需要设置线程池的参数;在执行任务时,需要提交任务到线程池;在关闭时,需要调用线程池的shutdown()或shutdownNow()方法来关闭线程池,并等待所有任务完成。正确地管理线程池的生命周期可以避免资源泄漏和线程阻塞的问题。
  5. 线程安全性:在自定义线程池时,需要考虑线程安全性。多个任务并发执行时,可能会涉及到共享资源的访问,需要使用合适的同步机制来保证线程安全。

总之,自定义线程池需要合理配置线程池的大小、选择适当的任务队列和拒绝策略,正确管理线程池的生命周期,并考虑线程安全性。这些注意事项可以帮助我们设计高效、可靠的线程池。

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

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

相关文章

基于视觉的机器人抓取——从物体定位、物体姿态估计到平行抓取器抓取估计——综述

综述 本文对基于视觉的机器人抓取进行了全面的综述。我们总结了基于视觉的机器人抓取过程中的三个关键任务&#xff0c;即物体定位、物体姿态估计和抓取估计。详细地说&#xff0c;对象定位任务包括无分类的对象定位、对象检测和对象实例分割。此任务提供输入数据中目标对象的…

腾讯也来电商掺一脚了?视频号小店或成2024年最大黑马!

大家好&#xff0c;我是电商小布。 当前的互联网时代下&#xff0c;电商无疑是最炙手可热的行业。 各种各样电商项目的出现&#xff0c;给了我们大家更多的机会选择&#xff0c;并从中来享受到流量至上的魅力。 腾讯旗下的视频号小店就是其中之一。 这个项目是依靠于视频号…

2024蓝桥杯每日一题(区间DP)

备战2024年蓝桥杯 -- 每日一题 Python大学A组 试题一&#xff1a;游戏 试题二&#xff1a;石子合并 试题三&#xff1a;密码脱落 试题四&#xff1a;能量项链 试题一&#xff1a;游戏 【题目描述】 玩家一和玩家二共同玩一个小游戏。给定一个包含 N 个…

创新科技助力电子元器件商城的品牌建设与用户体验提升

创新科技可以在电子元器件商城的品牌建设和用户体验提升方面发挥重要作用。以下是一些创新科技可以助力的方面&#xff1a; 虚拟现实&#xff08;VR&#xff09;和增强现实&#xff08;AR&#xff09;技术&#xff1a; 利用VR和AR技术&#xff0c;为用户提供沉浸式的购物体验。…

ios应用内支付

用uniapp开发iOS应用内支付 准备前端代码服务器端处理如果iOS支付遇到问题实在解决不了&#xff0c;可以联系我帮忙解决&#xff0c;前端后端都可以解决&#xff08;添加的时候一定要备注咨询iOS支付问题&#xff09; 准备前端代码 获取支付通道 (uni.getProvider) uni.getPr…

双非本,拿到美团测开实习了——经验分享

前言 最近是春招、暑期实习的高峰期&#xff0c;自己也凭借着持续的准备和一部分运气&#xff0c;较早拿到了美团的测开暑期实习。 以前接到美团的短信&#xff0c;都是外卖送达的通知&#xff0c;没想到自己有一天&#xff0c;也能收到offer录用的通知。虽然是测试开发的岗位…

【详细讲解语言模型的原理、实战与评估】

&#x1f308;个人主页:程序员不想敲代码啊&#x1f308; &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家&#x1f3c6; &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提…

使用PopLDdecay软件绘制LD衰减图

前记 PopLDdecay是一款用于进行种群遗传学和关联分析的软件。它可以在全基因组水平上进行基因型数据的相关性和衰减分析&#xff0c;帮助研究人员探索种群间的遗传差异和突变选择的模式。 使用PopLDdecay可以实现以下功能&#xff1a; 遗传距离的计算&#xff1a;可以计算遗…

2024.03.18 校招 实习 内推 面经

绿*泡*泡VX&#xff1a; neituijunsir 交流*裙 &#xff0c;内推/实习/校招汇总表格 1、校招 | 英特尔中国2024校园招聘 校招 | 英特尔中国2024校园招聘 2、校招&实习 | 小红书 2024届春季校园招聘启动&#xff08;内推&#xff09; 校招&实习 | 小红书 2024届春季…

RGB到CMYK的转换原理及例程

RGB&#xff08;红绿蓝&#xff09;和CMYK&#xff08;青、品红、黄、黑&#xff09;是两种常用的颜色模型&#xff0c;RGB用于表示彩色图像&#xff0c;而CMYK主要用于印刷。RGB到CMYK的转换原理涉及颜色的补色和映射。 RGB颜色模型使用红、绿、蓝三个通道来表示各种颜色。每…

关于Anaconda通过environment.yml配置环境的常见问题解决办法

配环境总是一个老生常谈的问题&#xff0c;有些项目写得好的&#xff0c;会把一些冗余的包删除&#xff0c;只留下必要的包&#xff0c;并且手把手教你pip安装&#xff0c;但是有些项目就直接丢一个200~300行的environment.yaml文件或者requirement.txt文件让你自己去配&#x…

C++之类和对象的中篇

&#x1d649;&#x1d65e;&#x1d658;&#x1d65a;!!&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦ &#x1f44f;&#x1f3fb;‧✧̣̥̇:Solitary_walk ⸝⋆ ━━━┓ - 个性标签 - &#xff1a;来于“云”的“羽球人”。…

【EBS】ORACLE EBS R12财务月结基础

一、月结概述 1、什么叫月结&#xff1a;从字面含义上&#xff0c;即为月底结帐。 2、月结的目的 1&#xff09;会计分期 2&#xff09;财务报告 3、什么叫对帐&#xff1a;即将两套帐核对。在Oracle中&#xff0c;主要指将子模块的帐与总帐核对。 4、为什么要对帐&#xff…

代码随想录——删除有序数组中的重复项(Leetcode26)

题目链接 双指针思想&#xff0c;和上一篇Leetcode27类似 class Solution {public int removeDuplicates(int[] nums) {int slow 0;for(int fast 1; fast < nums.length; fast){if(nums[fast] ! nums[slow]){nums[slow] nums[fast];}}return slow 1;} }

基于Arduino IDE 野火ESP8266模块 JSON数据格式处理

一、库文件 ArduinoJSON 可以使用 ArduinoJSON库 来解析和处理JSON数据。 二、JSON数据 序列化 Serialization 序列化&#xff08;serialization&#xff09;&#xff1a; 序列化是将数据结构或对象状态转换为可存储或传输的格式。 测试代码&#xff1a; #include <Ardu…

【并发编程】线程的基础概念

一、基础概念 1.1 进程与线程A 什么是进程&#xff1f; 进程是指运行中的程序。 比如我们使用钉钉&#xff0c;浏览器&#xff0c;需要启动这个程序&#xff0c;操作系统会给这个程序分配一定的资源&#xff08;占用内存资源&#xff09;。 什么线程&#xff1f; 线程是CP…

如何批量给照片添加圆角?为什么要给照片添加圆角?

公司在对外宣传过程中&#xff0c;往往要要求图片修成圆角。比如在网上公司&#xff0c;就下达过这样的任务&#xff0c;在短时间内将公司所有的物品图片都修成圆角。遇到这种情况哪怕是用专业的PS工具&#xff0c;解决这个问题也是非常麻烦的。那么图片怎么修成圆角又快又高效…

linux离线安装maven

一、下载maven 地址&#xff1a;Maven – Download Apache Maven 使用root权限用户登录服务器 cd /opt sudo mkdir maven cd maven 二、上传maven 使用Xftp工具 三、解压并配置环境变量 tar -zxvf tar -zxvf apache-maven-3.9.6-bin.tar.gz cd apache-maven-3.9.6/ 看到解压…

【Hadoop大数据技术】——Hive数据仓库(学习笔记)

&#x1f4d6; 前言&#xff1a; Hive起源于Facebook&#xff0c;Facebook公司有着大量的日志数据&#xff0c;而Hadoop是实现了MapReduce模式开源的分布式并行计算的框架&#xff0c;可轻松处理大规模数据。然而MapReduce程序对熟悉Java语言的工程师来说容易开发&#xff0c;但…

java.lang.ClassNotFoundException: javafx.application.Application

java8&#xff08;jdk1.8&#xff09;到java10&#xff08;jdk10&#xff09;中内含有JavaFx 在java11&#xff08;jdk11&#xff09;以及以后的版本中剥离出来需要开发者独立下载&#xff0c;另行导入download https://gluonhq.com/products/javafx/java --module-path $FX-P…