java 线程池线程忙碌且阻塞队列也满了时给一个拒接的详细报告
2023-09-11 14:17:56 时间
线程池线程忙碌且阻塞队列也满了时给一个拒接的详细报告。下面是一个自定义的终止策略类,继承了ThreadPoolExecutor.AbortPolicy类并覆盖了rejectedExecution方法把当前线程及线程池的状态给做了一个详细的报告。
默认抛出的异常消息比较简单:
/** * Always throws RejectedExecutionException. * * @param r the runnable task requested to be executed * @param e the executor attempting to execute this task * @throws RejectedExecutionException always */ public void rejectedExecution(Runnable r, ThreadPoolExecutor e) { throw new RejectedExecutionException("Task " + r.toString() + " rejected from " + e.toString()); }
下面是详细报告的代码:
public class AbortPolicyWithReport extends ThreadPoolExecutor.AbortPolicy { protected static final Logger logger = LoggerFactory.getLogger(AbortPolicyWithReport.class); private final String threadName; private final URL url; public AbortPolicyWithReport(String threadName, URL url) { this.threadName = threadName; this.url = url; } @Override public void rejectedExecution(Runnable r, ThreadPoolExecutor e) { String msg = String.format("Provider端线程池满!" + " Thread Name: %s, Pool Size: %d (active: %d, core: %d, max: %d, largest: %d), Task: %d (completed: %d)," + " Executor status:(isShutdown:%s, isTerminated:%s, isTerminating:%s), in %s://%s:%d!" , threadName, e.getPoolSize(), e.getActiveCount(), e.getCorePoolSize(), e.getMaximumPoolSize(), e.getLargestPoolSize(), e.getTaskCount(), e.getCompletedTaskCount(), e.isShutdown(), e.isTerminated(), e.isTerminating(), url.getProtocol(), url.getIp(), url.getPort()); logger.warn(msg); throw new RejectedExecutionException(msg); } }
相关文章
- 深入java面向对象四:Java 内部类种类及使用解析(转)
- [Java 基础] 并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue用法
- [Java基础] java的守护线程与非守护线程
- Java实现 LeetCode 406 根据身高重建队列
- java实现 洛谷 P1427 小鱼的数字游戏
- 【JAVA】 02-Java对象细节
- 【JAVA】 01-Java基础知识
- 【JAVA】java中char类型数组用数组名打印结果不是地址值而是数组内容
- [Java Sprint] Spring XML Configuration : Constructor Injection Demo
- [Linux] Install java and add JAVA_HOME, PATH
- Java List序列化的实现
- Java基础,字节字符
- 【项目实战】并发编程之Java集合框架中的一个线程安全的队列实现 —— LinkedBlockingQueue入门介绍
- 【java】Java经典面试题整理(附答案)
- Java如何给数组排序Comparable方式
- Java基本数据类型取值范围
- 【Java用法】java 8两个List集合取交集、并集、差集、去重并集
- 【华为OD机试 2023】最小调整顺序次数 / 特异性双端队列(C++ Java JavaScript Python)
- 【华为OD机试 2023】 打印机队列(C++ Java JavaScript Python)
- Java 阻塞队列 BlockingQueue 详解: put,add 和 offer 三个方法
- 一文详解java线程池 详解Java线程池的七个参数 详解池化技术 java如何选择核心线程数 详解Java线程池的拒绝策略
- 【java】Java 内存模型
- JAVA开发讲义(二)-Java程序设计之数据之谜四
- JAVA开发讲义(二)-Java程序设计之数据之谜三
- Java中i++与++i区别