package org.springside.modules.utils.concurrent; import static org.assertj.core.api.Assertions.*; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.TimeUnit; import org.junit.Test; import org.springside.modules.test.log.LogbackListAppender; import org.springside.modules.utils.concurrent.threadpool.ThreadPoolBuilder; public class ThreadDumpperTest { public static class LongRunTask implements Runnable { private CountDownLatch countDownLatch; public LongRunTask(CountDownLatch countDownLatch) { this.countDownLatch = countDownLatch; } @Override public void run() { countDownLatch.countDown(); ThreadUtil.sleep(5, TimeUnit.SECONDS); } } @Test public void test() throws InterruptedException { ExecutorService executor = ThreadPoolBuilder.fixedPool().setPoolSize(10).build(); CountDownLatch countDownLatch= ConcurrentTools.countDownLatch(10); for(int i=0;i<10;i++){ executor.execute(new LongRunTask(countDownLatch)); } countDownLatch.await(); ThreadDumpper dumpper = new ThreadDumpper(); dumpper.threadDumpIfNeed(); LogbackListAppender appender = new LogbackListAppender(); appender.addToLogger(ThreadDumpper.class); // disable,不输出 dumpper.setEnable(false); dumpper.threadDumpIfNeed(); assertThat(appender.getAllLogs()).hasSize(0); // 设置最少间隔,不输出 dumpper.setEnable(true); dumpper.setLeastInterval(1800); dumpper.threadDumpIfNeed(); assertThat(appender.getAllLogs()).hasSize(0); executor.shutdownNow(); } }