java ThreadPoolExecutor 异常捕获
2024-10-07 19:09:50
一,创建一个线程池
其中:
public void rejectedExecution(Runnable r, ThreadPoolExecutor executor)
饱和策略执行时的具体逻辑。
protected void afterExecute(Runnable r, Throwable t)
异常后的具体逻辑。
package com.kintech.scanAF.common; import com.kintech.common.utils.log.LogerHelper;
import java.util.concurrent.*; /**
* @author Tyler
* @date 2019/9/12
*/
public class ThreadHelper {
//初始化线程池
private static final ExecutorService pool = new ThreadPoolExecutor(
2,
5,
60,
TimeUnit.SECONDS,
new ArrayBlockingQueue<Runnable>(10),
Executors.defaultThreadFactory(),
new ThreadPoolExecutor.DiscardPolicy(){
public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
LogerHelper.Write("--- "+this.getClass().getName()+"\r\n--- 队列已满,请稍后再来");
}
})
{
@Override
protected void afterExecute(Runnable r, Throwable t) {
super.afterExecute(r, t);
LogerHelper.Write(t.getMessage());
System.out.println(t.getMessage());
}
}; /**
* 执行线程池方法(方法在RunnableFunc文件夹中)
* @param run
*/
public static void execute(Runnable run)
{
pool.execute(run);
}
/**
* 执行线程池方法(方法在RunnableFunc文件夹中)
* @param run
*/
public static Future<?> submit(Runnable run)
{
Future<?> future = pool.submit(run);
return future;
} }
线程池的参数介绍:
public ThreadPoolExecutor(
int corePoolSize, // 线程数量
int maximumPoolSize, // 最大线程数量
long keepAliveTime, // 线程存活时间
TimeUnit unit, //时间单位
BlockingQueue<Runnable> workQueue, // 任务队列
ThreadFactory threadFactory, // 线程创建工厂,可以给线程起名字
RejectedExecutionHandler handler) // 饱和策略
二,创建任务
package com.kintech.scanAF.common.RunnableFunc; /**
* @author Tyler
* @date 2019/9/12
*/
public class Test implements Runnable {
private String a;
public Test(String a)
{
this.a=a;
} @Override
public void run() {
try
{
throw new RuntimeException( "Service has error !");
}
catch (Exception e) {
throw e;
}
finally
{
a=null;
} }
}
三,调用并获取异常
public void MainTest(String a) throws IOException {
Future<?> future = ThreadHelper.submit(new Test(a));
try {
future.get();
}
catch (Exception ex)
{
//记录日志
LogerHelper.Write(ex.getMessage());
//swing弹窗
JOptionPane.showMessageDialog(null, ex.getMessage(), "Message", JOptionPane.ERROR_MESSAGE);
} }
最新文章
- GooglePlay 首页效果----tab的揭示效果(Reveal Effect) (1)
- 夏夏的php开发笔记开写啦
- java分享第十八天( JAVA利用enum结合testng做数据驱动示例)
- Redis学习-基础环境介绍(二)
- Beta版本冲刺第一天 12.5
- BZOJ4411——[Usaco2016 Feb]Load balancing
- python学习第二天
- django转义safe
- Base-Android快速开发框架(一)--概述
- jbpm与spring hibernate struts整合
- 【学习opencv第六篇】图像的反转操作
- struts2由&;lt;s:tree&;gt;要么dtree小工具 建立树
- python入门必备知识总结
- SVN的学习以及使用!
- JPA 系列教程2-单表操作
- [活动] 【奖品撩人】部落守卫者集结令&#183;这一回同程SRC的安全由“我”守卫!
- Amqp整合com.rabbitmq.client.ShutdownSignalException: channel error; protocol method异常处理
- 手把手教你如何优雅的使用Aop记录带参数的复杂Web接口日志
- sizeof操作符的一些例子
- vs2010 vs2013等vs中如何统计整个项目的代码行数