首页 > 其他分享 >通用线程池2

通用线程池2

时间:2024-10-10 14:10:32浏览次数:7  
标签:通用 策略 队列 任务 线程 executor ThreadPoolExecutor

 1 public enum CommonThreadPoolEnum {
 2 
 3     TAKE_PHONE_NUMBER_THREAD_POOL;
 4 
 5     private ThreadPoolExecutor executor;
 6 
 7     CommonThreadPoolEnum() {
 8         int corePoolSize = 6;
 9         int maximumPoolSize = 6;
10         int workQueue = 500;
11         executor = new ThreadPoolExecutor(corePoolSize, maximumPoolSize, 30000 L, TimeUnit.MILLISECONDS, 
12         new LinkedBlockingQueue<>(workQueue), 
13         new ThreadPoolExecutor.DiscardPolicy());
14         executor.allowCoreThreadTimeOut(true);
15     }
16 
17     /**
18      * 添加带返回值的任务
19      */
20     public <M> Future <M> add(Callable <M> task) {
21         return executor.submit(task);
22     }
23 
24     /**
25      * 添加不带返回值的任务
26      */
27     public void add(Runnable task) {
28         executor.execute(task);
29     }
30 }

该线程池使用了枚举类,而没有使用普通的类

线程池自定义了最大线程数、核心线程数、线程排队数,以及当线程排队超过限制时对超出部分线程的处理策略(这里是直接丢弃)

使用该线程池时,根据具体任务的类型,选择带返回结果或不带返回结果的方法


一般我们创建线程池时,为防止资源被耗尽,任务队列都会选择创建有界任务队列,但种模式下如果出现任务队列已满且线程池创建的线程数达到你设置的最大线程数时,这时就需要你指定ThreadPoolExecutor的RejectedExecutionHandler参数即合理的拒绝策略,来处理线程池"超载"的情况。ThreadPoolExecutor自带的拒绝策略如下:

1、AbortPolicy策略:该策略会直接抛出异常,阻止系统正常工作;

2、CallerRunsPolicy策略:如果线程池的线程数量达到上限,该策略会把任务队列中的任务放在调用者线程当中运行;

3、DiscardOledestPolicy策略:该策略会丢弃任务队列中最老的一个任务,也就是当前任务队列中最先被添加进去的,马上要被执行的那个任务,并尝试再次提交;

4、DiscardPolicy策略:该策略会默默丢弃无法处理的任务,不予任何处理。当然使用此策略,业务场景中需允许任务的丢失;

标签:通用,策略,队列,任务,线程,executor,ThreadPoolExecutor
From: https://www.cnblogs.com/ZT-SummerRain/p/18456018

相关文章

  • JAVA基础之九-泛型(通用类型)
    总体而言,泛型(通用类型)是一个好东西,它是一个工程上起到好处的东西,对于性能、安全等并没有什么帮助。在java工程上,泛型属于必须掌握的,理由如下:1.各种源码中基本上都有泛型,无论是java基础源码还是Spring或者阿帕奇的。不掌握这个,你读不懂。你没有方法饶过它2.有了泛型,某种程度上......
  • 多线程面试笔记
    1-多线程与并发基础1.1-线程和进程的区别什么是线程和进程?进程:程序由指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至CPU,数据加载至内存。在指令运行过程中还需要用到磁盘、网络等设备。进程就是用来加载指令、管理内存、管理IO的。当一个程序被运行,......
  • AMD 线程撕裂者7970X 搭配双卡A5000,打造模具设计公司工作站虚拟化方案
    客户背景客户为一家模具设计公司,使用UG/NX设计软件,现有10名设计师。当前面临以下问题:信息安全:设计图纸存在泄密风险,无法确保数据安全。远程访问:设计师无法通过远程方式访问工作站进行设计工作。资源共享:设计工作站目前归属于个人,设计资源难以高效共享,工作站资源利用率较低......
  • 线程池监控2-监控线程池状态、线程数量和队列任务数量等
    1.实现原理这篇博文是基于线程池监控1-监控任务执行时间,原理是:创建一个固定时间间隔执行的线程,来记录线程池的池状态、线程数量和队列任务数量等,具体方案:使用单例类缓存所有创建的线程池对象,类创建时启动定时任务线程,定期遍历缓存中线程池,记录线程池信息。2.实现代码packa......
  • 通用线程池1
    1publicclassCommonThreadPool{2privatestaticfinalCommonThreadPoolpool=newCommonThreadPool();3privateThreadPoolExecutorexecutor;4privateCommonThreadPool(){5intcorePoolSize=4;6intmaximumPoolSize......
  • C#使用线程安全队列ConcurrentQueue处理数据
    usingSystem;usingSystem.Collections.Concurrent;usingSystem.Collections.Generic;usingSystem.Globalization;usingSystem.Linq;usingSystem.Text;usingSystem.Threading;usingSystem.Threading.Tasks;namespaceConsoleApp10{internalclassProg......
  • vue3中如何实现通用头部?
    在Vue中实现通用头部可以通过以下几种方式:一、使用Vue组件创建头部组件首先,创建一个名为HeaderComponent.vue的Vue组件文件。在这个组件中,可以使用Vue的模板语法来设计头部的结构,例如包含导航栏、品牌标志、搜索框等元素。<template><header><......
  • [智能网联汽车/数据标准/法规政策] 标准解读:GB/T 44464-2024《汽车数据通用要求》
    0引言随着智能技术的不断发展,智能网联汽车作为新时代移动智能终端的代表,正引领着汽车产业向智能化、网联化深刻转型与升级。智能网联汽车与云端服务器、移动端、车端等设备存在大量的数据交互,包括车辆运行数据、用户个人信息等。缺乏对这些数据实施的有效监管与控制,将潜藏重大......
  • 基于Echarts+HTML5可视化数据大屏展示-大数据可视化通用版
    博主主页:猫头鹰源码博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万+、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作​主要内容:毕业设计(Javaweb项目|小程序|Python|HTML|数据可视化|SSM|SpringBoot|Vue|Jsp|PHP......
  • Java多线程编程基础与高级特性
    在现代软件开发中,多线程编程是一个重要的概念,它能够充分利用多核处理器的能力,提高程序的执行效率。Java语言内置了对多线程的支持,使得开发者可以方便地创建和管理线程。创建线程1.继承Thread类这是最直接的方式,通过创建一个继承自Thread类的子类,并重写run()方法来定义线程......