配置類java
@Configuration @EnableAsync public class TaskExecutorConfig { @Bean("taskExexutor") public Executor getAsyncExecutors(){ ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setCorePoolSize(5); executor.setQueueCapacity(25); executor.setMaxPoolSize(10); executor.initialize(); return executor; } }
任務執行類web
@Component public class TaskService { Logger logger = LoggerFactory.getLogger(TaskService.class); @Async("taskExexutor") public void doTask(int i) { String name = Thread.currentThread().getName(); String content = String.format("發送短信方法---- %s", name); System.out.println("執行的順序:" + i + " " + content + " 執行開始"); for (int j = 0; j < 100000; j++) { doSomething(j); } System.out.println(content + " 執行結束"); } private void doSomething(int i) { // try { //// Thread.sleep(10); // } catch (InterruptedException e) { // e.printStackTrace(); // } } @Async("taskExexutor") public void doTask2() { String name = Thread.currentThread().getName(); String content = String.format("發送短信方法---- %s", name); System.out.println(content + " 執行開始"); for (int i = 0; i < 100000; i++) { doSomething(i); } System.out.println(content + " 執行結束"); } }
運行編程
@Component public class OrderTaskService { @Autowired private TaskService taskService; public void orderTask(int i) { taskService.doTask(i); // taskService.doTask2(); } }
測試類多線程
@RunWith(SpringRunner.class) @SpringBootTest(classes = Ch522Application.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class TaskTest { @Autowired private OrderTaskService orderTaskService; @Test public void executorTest() { for (int i = 0; i < 15; i++) { orderTaskService.orderTask(i); } } }
測試結果併發
執行的順序:4 發送短信方法---- taskExexutor-5 執行開始 執行的順序:0 發送短信方法---- taskExexutor-1 執行開始 執行的順序:3 發送短信方法---- taskExexutor-4 執行開始 執行的順序:2 發送短信方法---- taskExexutor-3 執行開始 執行的順序:1 發送短信方法---- taskExexutor-2 執行開始 發送短信方法---- taskExexutor-5 執行結束 發送短信方法---- taskExexutor-1 執行結束 執行的順序:5 發送短信方法---- taskExexutor-5 執行開始 發送短信方法---- taskExexutor-4 執行結束 執行的順序:7 發送短信方法---- taskExexutor-4 執行開始 2019-09-04 22:19:49.710 INFO 13988 --- [ Thread-3] o.s.s.c.ThreadPoolTaskScheduler : Shutting down ExecutorService 'taskScheduler' 發送短信方法---- taskExexutor-3 執行結束 發送短信方法---- taskExexutor-2 執行結束 執行的順序:9 發送短信方法---- taskExexutor-2 執行開始 執行的順序:6 發送短信方法---- taskExexutor-1 執行開始 2019-09-04 22:19:49.718 INFO 13988 --- [ Thread-3] o.s.s.concurrent.ThreadPoolTaskExecutor : Shutting down ExecutorService 'taskExexutor' 發送短信方法---- taskExexutor-4 執行結束 發送短信方法---- taskExexutor-5 執行結束 執行的順序:8 發送短信方法---- taskExexutor-3 執行開始 發送短信方法---- taskExexutor-2 執行結束 發送短信方法---- taskExexutor-3 執行結束 發送短信方法---- taskExexutor-1 執行結束