java ThreadPoolExecutor 异常捕获
一,创建一个线程池
其中:
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);
}
}
java ThreadPoolExecutor 异常捕获的更多相关文章
- java代码异常捕获throws抛出异常
总结:Throwable 是所以异常的父类.error和Exception是继承它的类 Exception: 这类异常一般是外部错误,例如试图从文件尾后读取数据等,这并不是程序本身的错误,而是在应用环 ...
- java多线程异常捕获
java多线程中出现了异常,如何捕获.利用UncaughtExceptionHandler这个接口就可以了. 代码如下: package com.ming.thread.six.threadcreat ...
- java controller 异常捕获
package com.aiyusheng.framework.exception; import lombok.Data; /** * base异常类 * @author :cza * @date ...
- java 异常捕获小记
java 中异常捕获常用的为: try{ //业务代码 }catch(Exception e){ //异常捕获 }finally{ // 不管有无异常, 最后都会执行到这里 } 在方法体内如果想要把异 ...
- [javaSE] 异常捕获
异常:程序在运行时出现的不正常现象 Throwable |——Error |——Exception 严重级别:Error类和Exception类 异常的处理:try{}catch{}finally{} ...
- JAVA并发,线程异常捕获
由于线程的特性,当我们启动了线程是没有办法用try catch捕获异常的,如下例: package com.xt.thinks21_2; import java.util.concurrent.Exe ...
- java异常捕获的一点感悟
class Annoyance extends Exception {} class Sneeze extends Annoyance {} class Human { public static v ...
- 有关于异常捕获点滴,plus我也揭揭java的短
▄︻┻┳═一『异常捕获系列』Agenda: ▄︻┻┳═一有关于异常捕获点滴,plus我也揭揭java的短 ▄︻┻┳═一根据异常自定义处理逻辑([附]java异常处理规范) ▄︻┻┳═一利用自定义异常来 ...
- Java并发-UncaughtExceptionHandler捕获线程异常信息并重新启动线程
Java并发-UncaughtExceptionHandler捕获线程异常信息并重新启动线程 一.捕获异常并重新启用线程 public class Testun { public static voi ...
随机推荐
- SmartSql简介
0. Why 拥抱 跨平台 DotNet Core,是时候了. 高性能.高生产力,史上最轻量级的ORM.107kb 1. So SmartSql TargetFrameworks: .NETFrame ...
- 后端大佬给我配置的deploy serves文件以便学习
serves apiVersion: v1 kind: Service metadata: labels: com.wise2c.service: ui-ll-2 com.wise2c.stack: ...
- FastAdmin 关于列表渲染文字过长导致页面难以管理的问题
先贴一张图片做个例子 看不清图片的朋友可以右键图片,在<新标签页中打开图片>; 可以看到,由于内容过长,导致后面操作的增删改要拉到最后才能操作. 在我们的FastAdmin中,目前我还没找 ...
- LeetCode Array Easy 26.Remove Duplicates from Sorted Array 解答及疑惑
Description Given a sorted array nums, remove the duplicates in-place such that each element appear ...
- adb.exe端口被占用,起不来报错
一.准备部署android功能调试时:报错 Please ensure that adb is correctly located at 'D:\ProgramFiles\eclipse_jee_ox ...
- org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/json;charset=UTF-8' not supported
最后找到我的问题,springmvc配置文件中没加 <mvc:annotation-driven/> java代码: @RequestMapping(value="/reques ...
- xfce4之whisker不显示自定义启动器的解决
对某些启动比较麻烦的程序,想创建个启动器显示在whisker里,这样就能快速启动了. 通常自己创建的desktop文件可以放~/.local/share/applications里,但是按下面这个创建 ...
- PHP-两数相除
给定两个整数,被除数 dividend 和除数 divisor.将两数相除,要求不使用乘法.除法和 mod 运算符. 返回被除数 dividend 除以除数 divisor 得到的商. 示例 1: 输 ...
- mysql查询相关
查询事务 SELECT * FROM information_schema.INNODB_TRX\G; 查询正在锁的事务 SELECT * FROM INFORMATION_SCHEMA.INNODB ...
- appium1.4+华为8.0执行自动化脚本,报启动session失败,原因是unicode_ime_apk\Uni codeIME-debug.apk在手机上已存在,再次安装失败,导致启动session失败,解决办法:换高版本的appium
最开始做Android自动化测试时,通过执行脚本发现报,已安装UnicodeIME-debug.apk,再次安装失败,当时觉得这个apk对我来说没用,就把D:\Program Files (x86)\ ...