一,创建一个线程池

其中:

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);
} }

最新文章

  1. GooglePlay 首页效果----tab的揭示效果(Reveal Effect) (1)
  2. 夏夏的php开发笔记开写啦
  3. java分享第十八天( JAVA利用enum结合testng做数据驱动示例)
  4. Redis学习-基础环境介绍(二)
  5. Beta版本冲刺第一天 12.5
  6. BZOJ4411——[Usaco2016 Feb]Load balancing
  7. python学习第二天
  8. django转义safe
  9. Base-Android快速开发框架(一)--概述
  10. jbpm与spring hibernate struts整合
  11. 【学习opencv第六篇】图像的反转操作
  12. struts2由&amp;lt;s:tree&amp;gt;要么dtree小工具 建立树
  13. python入门必备知识总结
  14. SVN的学习以及使用!
  15. JPA 系列教程2-单表操作
  16. [活动] 【奖品撩人】部落守卫者集结令&#183;这一回同程SRC的安全由“我”守卫!
  17. Amqp整合com.rabbitmq.client.ShutdownSignalException: channel error; protocol method异常处理
  18. 手把手教你如何优雅的使用Aop记录带参数的复杂Web接口日志
  19. sizeof操作符的一些例子
  20. vs2010 vs2013等vs中如何统计整个项目的代码行数

热门文章

  1. JSP简单练习-一个简单的计数器
  2. 在我的Mint上安装网易云音乐
  3. wait/notify方法
  4. javafx将数据库内容输出到tableview表格
  5. Android Service完全解析(下)
  6. 判断list中元素是否是相邻
  7. python使用SMTP发邮件时使用Cc(抄送)和Bcc(密送)
  8. JSON对象排序并生成URL参数
  9. Read Uncommitted
  10. PHP ftp_nlist() 函数