ThreadPoolTaskConfig.java
/** * 默認情況下,在創建了線程池后,線程池中的線程數為0,當有任務來之后,就會創建一個線程去執行任務, * 當線程池中的線程數目達到corePoolSize后,就會把到達的任務放到緩存隊列當中; * 當隊列滿了,就繼續創建線程,當線程數量大於等於maxPoolSize后,開始使用拒絕策略拒絕 * * @author Jensen Zhan */ @Configuration @EnableAsync public class ThreadPoolTaskConfig { /** * 默認線程數 */ private static final int CORE_POOL_SIZE = 20; /** * 最大線程數 */ private static final int MAX_POOL_SIZE = 100; /** * 允許線程空閑時間(單位:默認為秒) */ private static final int KEEP_ALIVE_TIME = 10; /** * 緩沖隊列大小 */ private static final int QUEUE_CAPACITY = 200; /** * 線程池名前綴 */ private static final String THREAD_NAME_PREFIX = "Async-Service-"; @Bean public ThreadPoolTaskExecutor taskExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setCorePoolSize(CORE_POOL_SIZE); executor.setMaxPoolSize(MAX_POOL_SIZE); executor.setQueueCapacity(QUEUE_CAPACITY); executor.setKeepAliveSeconds(KEEP_ALIVE_TIME); executor.setThreadNamePrefix(THREAD_NAME_PREFIX); executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); executor.initialize(); return executor; } }
ThreadService.java
/** * @author Jensen Zhan */ @Service public class ThreadService { @Async public void sendMessage1() { for (int i = 0; i < 10000; i++) { Thread thread = Thread.currentThread(); System.out.println(thread.getName()); } } @Async public void sendMessage2() { for (int i = 0; i < 10000; i++) { Thread thread = Thread.currentThread(); System.out.println(thread.getName()); } } }
OpenThread.java
/** * @author Jensen Zhan */ @Component public class OpenThread implements ApplicationRunner { @Autowired private ThreadService threadService; @Override public void run(ApplicationArguments args) throws Exception { threadService.sendMessage1(); threadService.sendMessage2(); System.out.println("end ..."); } }
然后直接運行application