首页 > 其他分享 >线程池的拒绝策略

线程池的拒绝策略

时间:2024-09-13 15:47:22浏览次数:11  
标签:策略 拒绝 线程 executor setRejectedExecutionHandler ThreadPoolExecutor

线程池的拒绝策略是在任务无法被接受执行时,线程池采取的一种处理方式。Java中的ThreadPoolExecutor提供了几种内置的拒绝策略,可以通过构造函数或setRejectedExecutionHandler方法进行设置。以下是常见的拒绝策略:

AbortPolicy(默认策略):

AbortPolicy是默认的拒绝策略,当任务无法被接受时,会抛出RejectedExecutionException异常。这是默认的策略,表明线程池已经饱和,不能接受新的任务。
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy());
2.CallerRunsPolicy:

CallerRunsPolicy策略会将被拒绝的任务交给提交任务的线程来执行。这种策略不会抛出异常,而是将任务回退给调用者,由调用者自行处理。
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
3.DiscardPolicy:

DiscardPolicy策略会默默地丢弃无法处理的任务,不抛出异常,也不做任何处理。对于一些不太重要的任务,使用这个策略可能是一种合理的选择
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.DiscardPolicy());
4.DiscardOldestPolicy:

DiscardOldestPolicy策略会丢弃队列中最老的一个任务,然后尝试重新提交当前任务。
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.DiscardOldestPolicy());
自定义拒绝策略也是可能的,只需实现RejectedExecutionHandler接口并提供相应的处理逻辑。例如:

public class CustomRejectedExecutionHandler implements RejectedExecutionHandler {
@Override
public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
// 自定义处理逻辑
// ...
}
}

// 使用自定义的拒绝策略
executor.setRejectedExecutionHandler(new CustomRejectedExecutionHandler());
选择合适的拒绝策略取决于应用程序的需求和性质。不同的策略适用于不同的场景,开发人员应根据实际情况进行选择。


原文链接:https://blog.csdn.net/NZC2237/article/details/135560277

标签:策略,拒绝,线程,executor,setRejectedExecutionHandler,ThreadPoolExecutor
From: https://www.cnblogs.com/jadening/p/18412314

相关文章

  • Java21的虚拟线程来了
    1、什么是平台线程?平台线程是作为操作系统(OS)线程的薄包装器实现的。平台线程在其底层OS线程上运行Java代码,并且平台线程在其整个生命周期内捕获其OS线程。因此,可用的平台线程数量受限于OS线程的数量。平台线程通常具有较大的线程堆栈和由操作系统维护的其他资源。它们......
  • 面试官:线程池遇到未处理的异常会崩溃吗?
    首先,这个问题考察的是你对线程池execute方法和submit方法的理解,在Java线程池的使用中,我们可以通过execute方法或submit方法给线程池添加任务,但如果线程池中的程序在执行时,遇到了未处理的异常会怎么呢?接下来我们一起来看。1.execute方法execute方法用于提交一个不需要......
  • 多线程篇(线程池 - 整体介绍)(持续更新迭代)
    目录一、线程池(并发编程的艺术)1.Java中的线程池1.1.线程池的实现原理1.2线程池的使用1.线程池的创建2.向线程池提交任务3.关闭线程池4.合理地配置线程池5.线程池的监控1.3本章小结2.Executor框架2.1Executor框架简介1.Executor框架的两级调度模型2.......
  • Kafka 中消息保留策略详解
    个人名片......
  • 直播美颜SDK与主播美颜API的深度集成与优化策略详解
    本篇文章将深入探讨如何实现直播美颜SDK与主播美颜API的深度集成,并给出优化策略,帮助开发者构建高效的美颜工具。 一、直播美颜SDK与主播美颜API的基本概念1.直播美颜SDK直播美颜SDK是一套专门为视频流媒体应用提供实时美颜效果的开发工具包,旨在通过人脸识别、磨皮、美白、瘦脸等算......
  • 一个Android App最少有几个线程?实现多线程的方式有哪些?
    本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点多线程编程是Android应用开发中非常重要的一个环节,可以有效地提升应用的性能和用户体验。下面是对Android中多线程相关内容的详细介绍,包括app最少有几个线程。1.基本概念主线......
  • 视频监控平台是如何运作的?EasyCVR视频汇聚平台的高效策略与实践
    随着科技的飞速发展,视频监控平台在社会安全、企业管理、智慧城市构建等领域发挥着越来越重要的作用。一个高效的视频监控平台,不仅依赖于先进的硬件设备,更离不开强大的视频处理技术作为支撑。这些平台集成了多种先进的视频技术,以确保实时监控、智能分析、高效传输和存储。今天我们......
  • Java线程状态及生命周期
    基础概念Java线程在运行生命周期中的指定时刻只可能处于这6种不同状态的其中一个状态,分别是:NEW:初始状态,这是线程被创建出来但没有被调用start()。RUNNABLE:运行状态,线程被调用了start()等待运行的状态。BLOCKED:阻塞状态,等待WAITING:等待状态,表示该线程需要等待其他线程做出......
  • InfluxDB UI 设置保留策略
    InfluxDBUI设置保留策略创建Bucket时设置保留策略在InfluxDB2.x的UI中创建Bucket时,你可以直接设置其保留策略。以下是一个基本的步骤指南:登录到InfluxDBUI:使用你的凭据登录到InfluxDB2.x的Web界面。导航到Buckets页面:在左侧菜单中,找到并点击“Buckets”选项。创......
  • 线程池的应用-->2
    1.自定义线程工程当需要自定义线程的名字,线程的优先级,精灵线程状态时,需要自定义线程工厂。如何自定义线程工厂自定义工厂类,实现ThreadFactory接口,重写方法newThread()在创建线程池对象时,传递上述线程工厂对象publicclassTest5{publicstaticvoidmain(Strin......