### Question:
AbortPolicyWithReport extends ThreadPoolExecutor.AbortPolicy { @Override public void rejectedExecution(Runnable r, ThreadPoolExecutor e) { String msg = String.format( "Thread pool is EXHAUSTED!" + " Thread Name: %s, Pool Size: %d (active: %d, core: %d, max: %d, largest: %d), Task: %d (completed: %d)," + " Executor status:(isShutdown:%s, isTerminated:%s, isTerminating:%s)!", threadName, e.getPoolSize(), e.getActiveCount(), e.getCorePoolSize(), e.getMaximumPoolSize(), e.getLargestPoolSize(), e.getTaskCount(), e.getCompletedTaskCount(), e.isShutdown(), e.isTerminated(), e.isTerminating()); logger.warn(msg); dumpper.tryThreadDump(null); throw new RejectedExecutionException(msg); } AbortPolicyWithReport(String threadName); @Override void rejectedExecution(Runnable r, ThreadPoolExecutor e);  }### Answer:
@Test public void jStackDumpTest() throws InterruptedException { AbortPolicyWithReport abortPolicyWithReport = new AbortPolicyWithReport("test"); try { abortPolicyWithReport.rejectedExecution(new Runnable() { @Override public void run() { System.out.println("hello"); } }, (ThreadPoolExecutor) Executors.newFixedThreadPool(1)); } catch (RejectedExecutionException rj) { } Thread.sleep(1000); }