一、MyThreadPool

public class MyThreadPool {/*** 自定义线程名称,方便的出错的时候溯源*/private static ThreadFactory namedThreadFactory = new ThreadFactoryBuilder().setNamePrefix("YH-POOL-%d").build();/*** corePoolSize    线程池核心池的大小* maximumPoolSize 线程池中允许的最大线程数量* keepAliveTime   当线程数大于核心时,此为终止前多余的空闲线程等待新任务的最长时间* unit            keepAliveTime 的时间单位* workQueue       用来储存等待执行任务的队列* threadFactory   创建线程的工厂类* handler         拒绝策略类,当线程池数量达到上线并且workQueue队列长度达到上限时就需要对到来的任务做拒绝处理* 原理:* 有请求时,创建线程执行任务,当线程数量等于corePoolSize时,请求加入阻塞队列里,当队列满了时,接着创建线程,* 线程数等于maximumPoolSize。 当任务处理不过来的时候,线程池开始执行拒绝策略。* 换言之,线程池最多同时并行执行maximumPoolSize的线程,最多处理maximumPoolSize+workQueue.size()的任务。多余的默认采用AbortPolicy会丢弃。* 阻塞队列:*   ArrayBlockingQueue :一个由数组结构组成的有界阻塞队列。*   LinkedBlockingQueue :一个由链表结构组成的有界阻塞队列。*   PriorityBlockingQueue :一个支持优先级排序的无界阻塞队列。*   DelayQueue: 一个使用优先级队列实现的无界阻塞队列。*   SynchronousQueue: 一个不存储元素的阻塞队列。*   LinkedTransferQueue: 一个由链表结构组成的无界阻塞队列。*   LinkedBlockingDeque: 一个由链表结构组成的双向阻塞队列。*   拒绝策略:*   ThreadPoolExecutor.AbortPolicy: 丢弃任务并抛出RejectedExecutionException异常。 (默认)*   ThreadPoolExecutor.DiscardPolicy:也是丢弃任务,但是不抛出异常。*   ThreadPoolExecutor.DiscardOldestPolicy:丢弃队列最前面的任务,然后重新尝试执行任务。(重复此过程)*   ThreadPoolExecutor.CallerRunsPolicy:由调用线程处理该任务。*/private static ExecutorService service = new ThreadPoolExecutor(16,32,10L,TimeUnit.MILLISECONDS,new LinkedBlockingQueue<>(8),namedThreadFactory,new ThreadPoolExecutor.AbortPolicy());/*** 获取线程池* @return 线程池*/public static ExecutorService getEs() {return service;}/*** 使用线程池创建线程并异步执行任务* @param r 任务*/public static void newTask(Runnable r) {service.execute(r);}public static void shutdown() {service.shutdown();}}

二、注入

1、懒加载注入。(直接在用到线程池的方法里调用就是,这种就是只有当第一次访问这个方法时才创建线程池)

//定义固定长度的线程池  防止线程过多
ExecutorService executorService = MyThreadPool.getEs();

2、项目启动时就注入(两种方案)

2.1、在类上加注解注入

配置扫描路径(MyThreadPool在这个包下)              

2.2、配置注入。

写个配置类,用@Configuration+@Bean 注入spring

这种写法,只不过new的对象是 MyThreadPool

三、线程池参数失效

new ThreadPoolExecutor(
            16,
            32,
            10L,
            TimeUnit.MILLISECONDS,
            new LinkedBlockingQueue<>(8),
            namedThreadFactory,
            new ThreadPoolExecutor.AbortPolicy()
    );

如果第五个参数使用了无界队列,或者没有指定容量限制。那么第2,3,4参数都会失效,线程池会无限的创建线程,最终oom。

线程池创建与注入,以及线程池参数失效相关推荐

  1. 多线程总结:1.线程的创建于开启 2.线程的状态 3.线程安全

    多线程     三高: 高可用  高性能   高并发 thread 类         线程是程序中执行的线程. Java虚拟机允许应用程序同时运行多个执行线程. 多线程:         多任务执行 ...

  2. java 线程的创建和执行_线程管理(一)线程的创建和运行

    声明:本文是< Java 7 Concurrency Cookbook>的第一章, 作者: Javier Fernández González 译者:郑玉婷 校对:欧振聪 线程的创建和运行 ...

  3. 请详细描述一下线程从创建到死亡的几种状态都有哪些?

    请详细描述一下线程从创建到死亡的几种状态都有哪些? 新建( new ):新创建了一个线程对象. 可运行( runnable ):线程对象创建后,其他线程(比如 main 线程)调用了该对象的 star ...

  4. Linux 线程的创建与同步

    Linux 线程的创建与同步 1.线程的定义 2.线程的创建和使用 3.理解线程的并发运行 3.线程同步 3.线程的实现 1.线程的定义 线程:进程内部的一条执行路径.是资源调度和执行的基本单位. 进 ...

  5. linux c 线程的创建、线程等待、线程终止、线程分离

    1. 什么是线程   线程是进程执行内部的一个执行分支,在一个进程内部运行的多种执行流:内部本质上是多个线程在同一个地址空间运行:第一个pcb称之为主线程:有多个线程就有多个执行流:一个进程至少有一个 ...

  6. MFC多线程的创建,包括工作线程和用户界面线程

    MFC多线程的创建 1.MFC多线程简介 MFC对多线程进行了一层简单的封装,在Visual C++中每个线程都是从CWinThread类继承而来的.每一个应用程序的执行都有一个主线程,这个主线程也是 ...

  7. linux线程的创建与删除

    linux线程的创建与删除 使用linux线程时,编译时需要包含-pthread选项. Linux通用API返回0表示成功,返回-1表示失败,并设置errno以标识错误原因.但Pthreads相关的A ...

  8. Java 线程详解(一)线程的基础

    为了9月份的秋招呢,现在开始进行多线程以及并发相关知识的学习..加油加油 一.一些基本的概念 1.线程和进程 进程:正在运行的程序,是系统进行资源分配的独立单位. 线程:进程的执行路径,调度和执行的单 ...

  9. java 线程 暂停_如何实现Java线程的暂停和重新启用?

    展开全部 JAVA中线程开始有start方法,暂停用sleep(time)方法,线程停止用stop方法,线程等待wait方法,java 中没有线程重启一说,只能说线62616964757a686964 ...

最新文章

  1. 一杯茶的功夫,掌握Git常用命令(转载)
  2. mac如何导入python第三方库_mac下python安装第三方库
  3. 图说数据中心蒸发节能技术
  4. 佰腾科技:专利大数据的云上裂变之路
  5. php seaslog安装,浅谈win10下安装php seaslog扩展的方法
  6. 堡垒之夜安装包删除_堡垒之夜安装不了怎么办_常见安装下载问题解决方法_3DM网游...
  7. 中国wms仓储管理系统行业发展状况分析?
  8. 数据挖掘项目:银行信用评分卡建模分析(下篇)
  9. WiFi Interface 的 name 如何获取到
  10. 阿里云和腾讯云全方位对比
  11. 简单动态网站的搭建流程
  12. Lemmatization VS Stemming
  13. kubernetes的eviction机制
  14. 向下兼容性格什么意思_成大事者都有一种高段位能力:向下兼容
  15. 如何知道您是否准备从Mac切换到Linux
  16. cocos2d-x教程和项目实例集合
  17. C++ Reference: Standard C++ Library reference: C Library: cmath: fma
  18. php soap https 登录 复杂请求 上海资信 金融p2p Error cannot find parameter faultstringFunction ' not found
  19. PHP开启magic扩展,php.ini中Magic_Quotes_Gpc开关设置
  20. 【GD32F427开发板试用】5. SPI驱动TFTLCD屏幕

热门文章

  1. 2021爱智先行者 - 自动化房屋能源控制核心
  2. VUE 项目大文件上传下载解决方案
  3. 获取keytab文件
  4. 如何做好人才盘点?企业需要从这五个方面入手
  5. android截长屏实现,android 手机截取长屏实例代码
  6. 比较全的常见的架构设计思想整理
  7. Ubuntu14.04下搜狗输入法安装
  8. 怎么做才能增加软文吸引力
  9. golang源码解读之 net.Dial
  10. 雪花算法(snowflake)笔记