一,创建一个线程池

其中:

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 异常捕获的更多相关文章

  1. java代码异常捕获throws抛出异常

    总结:Throwable 是所以异常的父类.error和Exception是继承它的类 Exception: 这类异常一般是外部错误,例如试图从文件尾后读取数据等,这并不是程序本身的错误,而是在应用环 ...

  2. java多线程异常捕获

    java多线程中出现了异常,如何捕获.利用UncaughtExceptionHandler这个接口就可以了. 代码如下: package com.ming.thread.six.threadcreat ...

  3. java controller 异常捕获

    package com.aiyusheng.framework.exception; import lombok.Data; /** * base异常类 * @author :cza * @date ...

  4. java 异常捕获小记

    java 中异常捕获常用的为: try{ //业务代码 }catch(Exception e){ //异常捕获 }finally{ // 不管有无异常, 最后都会执行到这里 } 在方法体内如果想要把异 ...

  5. [javaSE] 异常捕获

    异常:程序在运行时出现的不正常现象 Throwable |——Error |——Exception 严重级别:Error类和Exception类 异常的处理:try{}catch{}finally{} ...

  6. JAVA并发,线程异常捕获

    由于线程的特性,当我们启动了线程是没有办法用try catch捕获异常的,如下例: package com.xt.thinks21_2; import java.util.concurrent.Exe ...

  7. java异常捕获的一点感悟

    class Annoyance extends Exception {} class Sneeze extends Annoyance {} class Human { public static v ...

  8. 有关于异常捕获点滴,plus我也揭揭java的短

    ▄︻┻┳═一『异常捕获系列』Agenda: ▄︻┻┳═一有关于异常捕获点滴,plus我也揭揭java的短 ▄︻┻┳═一根据异常自定义处理逻辑([附]java异常处理规范) ▄︻┻┳═一利用自定义异常来 ...

  9. Java并发-UncaughtExceptionHandler捕获线程异常信息并重新启动线程

    Java并发-UncaughtExceptionHandler捕获线程异常信息并重新启动线程 一.捕获异常并重新启用线程 public class Testun { public static voi ...

随机推荐

  1. Darknet YOLOv3 on Jetson Nano

    推荐比较好的博客:https://ai4sig.org/2019/06/jetson-nano-darknet-yolov3/ 用的AlexeyAB的版本,并且给出了yolov3和tiny的效果对比. ...

  2. 初探Remoting双向通信(四)

    原 初探Remoting双向通信(四) 2013年06月26日 11:11:32 喜欢特别冷的冬天下着雪 阅读数 2632 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blo ...

  3. JSP版本的数据库操作

    代码时间:2015-6-16 <%@ page language="java" import="java.util.*" pageEncoding=&qu ...

  4. IDEA中将工程打包成war包及部署到Tomcat流程

    工程打包成war包及部署到Tomcat流程 再IDEA开发工具中,将工程打包成war包流程: 父pom里需要移除内置的tomcat <dependency> <groupId> ...

  5. matlab filtfilt 函数

    紧接上一篇,简单分析matlab中的非常好用的 filtfilt 函数,一款零相移滤波函数. 其matlab中的语法如下: y = filtfilt(data,x);1非常简单,不是一般的简单!然而, ...

  6. C# 利用发射动态创建泛型类型的对象,泛型类型支持带惨的构造函数

    static class Program { static void Main(string[] args) { var aaa = Create<AAA>("aaa" ...

  7. PHP创建多级目录文件夹

    PHP创建多级目录的代码实例如下: <?php function create_dir($dirName) { // 去除输入目录名中的空格部分 $dirName = trim($dirName ...

  8. 75. InputStreamReader和OutputStreamWriter(转换流--字节流转换成字符流)

    转换流: InputStreamReader   输入字节流转换成输入字符流OutputStreamWriter  输出字节流转换成输出字符流 总结:就是字节流转换成字符流,但是不能字节流转换成字节流 ...

  9. 数学二分——cf700A

    二分答案 #include<bits/stdc++.h> using namespace std; #define ll long long int n,l,v1,v2,k; double ...

  10. ZROI week1

    \[ZROI day1\] \[Grid\] 题目描述 给定一个矩阵,小写字母,求一条路径使得从\((1,1) -> (n,m)\),字典序最小,并且每次只能向右或者向下. 题解 先考虑如果没有 ...