package jdk_concurrent;import java.util.concurrent.BlockingQueue;import java.util.concurrent.Callable;import java.util.concurrent.Future;import java.util.concurrent.SynchronousQueue;import java.util.concurrent.ThreadPoolExecutor;import java.util.concurrent.TimeUnit;public class GetExceptionThreadPool {public static void main(String[] args) {getExp2();}private static void getExp() {ThreadPoolExecutor poolExecutor = new ThreadPoolExecutor(0, Integer.MAX_VALUE, 0L, TimeUnit.SECONDS,new SynchronousQueue<Runnable>());for (int i = 0; i < 5; i++) {// poolExecutor.execute(new DivTask(100, i));// submit()有时会丢失异常堆栈poolExecutor.submit(new DivTask(100, i));}}private static void getExp2() {ThreadPoolExecutor poolExecutor = new TraceThreadPoolExecutor(0, Integer.MAX_VALUE, 0L, TimeUnit.SECONDS,new SynchronousQueue<Runnable>());for (int i = 0; i < 5; i++) {// poolExecutor.execute(new DivTask(100, i));// submit()有时会丢失异常堆栈poolExecutor.submit(new DivTask(100, i));}}public static class DivTask implements Runnable {int a, b;public DivTask(int a, int b) {super();this.a = a;this.b = b;}@Overridepublic void run() {double re = a / b;System.out.println(re);}}// 自定义线程池追踪异常堆栈public static class TraceThreadPoolExecutor extends ThreadPoolExecutor {public TraceThreadPoolExecutor(int coreSize, int maximumSize, long keepAliveTime, TimeUnit unit,BlockingQueue<Runnable> workQueue) {super(coreSize, maximumSize, keepAliveTime, unit, workQueue);}@Overridepublic void execute(Runnable task) {super.execute(wrap(task, clientTrace(), Thread.currentThread().getName()));}@Overridepublic 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() {@Overridepublic void run() {try {task.run();} catch (Exception e) {clientStack.printStackTrace();e.printStackTrace();throw e;}}};}}}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。