封装ThreadPoolExecutor 支持打印异常堆栈
2017-06-22 16:15
204 查看
public class TraceThreadPoolExecutor extends ThreadPoolExecutor { public TraceThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue) { super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue); } @Override public void execute(Runnable command) { super.execute(wrap(command, clientTrace(), Thread.currentThread().getName())); } @Override public Future<?> submit(Runnable task) { return super.submit(wrap(task, clientTrace(), Thread.currentThread().getName())); } private Exception clientTrace() { return new Exception("Client stack trace"); } private Runnable wrap(final Runnable task, final Exception clientStack, String clientThreadName) { return new Runnable() { @Override public void run() { try { task.run(); } catch (Exception e) { clientStack.printStackTrace(); throw e; } } }; } }
测试代码如下:
public class DoIT { public static class DivTask implements Runnable { int a,b; public DivTask(int a,int b){ this.a = a; this.b = b; } @Override public void run() { double re = a/b; println(re); } } public static void main(String[] args) throws InterruptedException { ThreadPoolExecutor pool = new TraceThreadPoolExecutor(0,Integer.MAX_VALUE,0L,TimeUnit.SECONDS,new SynchronousQueue<>()); for (int i = 0;i<5;i++){ pool.execute(new DivTask(100,i)); } } static void println(Object str) { System.out.println(str); } }
相关文章推荐
- 打印Java异常堆栈信息
- backtrace-----打印进程异常退出时的堆栈信息
- Struts2不打印异常堆栈信息
- java打印异常中的堆栈信息
- log4j打印抛出异常时堆栈内容
- 如何打印Java异常的完整堆栈内容
- slf4j如何打印java异常堆栈信息throwable对象
- MFC异常打印调用堆栈整合SEH异常和日志文件类
- 检测异常并打印堆栈
- java没有打印异常调用堆栈的问题
- Linux程序异常退出打印调用堆栈
- backtrace-----打印进程异常退出时的堆栈信息
- Linux程序异常退出打印调用堆栈
- 日志如何打印异常堆栈信息。
- 将Java异常的完整堆栈内容打印到log4j日志
- backtrace-----打印进程异常退出时的堆栈信息
- 日志中不打印异常堆栈
- log中打印e异常信息的堆栈
- backtrace-----打印进程异常退出时的堆栈信息
- log4j 不打印异常堆栈