From 7dbc34ec1fb79ee1b4e1745b543a79e72f0ca638 Mon Sep 17 00:00:00 2001 From: zhaiyongchao Date: Sun, 15 Apr 2018 10:18:17 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BD=BF=E7=94=A8@Async=E5=AE=9E=E7=8E=B0?= =?UTF-8?q?=E5=BC=82=E6=AD=A5=E8=B0=83=E7=94=A8=EF=BC=9A=E4=BD=BF=E7=94=A8?= =?UTF-8?q?Future?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Chapter4-1-5/pom.xml | 56 +++++++++++++++++++ .../main/java/com/didispace/Application.java | 38 +++++++++++++ .../main/java/com/didispace/async/Task.java | 32 +++++++++++ .../src/main/resources/application.properties | 0 .../java/com/didispace/ApplicationTests.java | 29 ++++++++++ 5 files changed, 155 insertions(+) create mode 100644 Chapter4-1-5/pom.xml create mode 100644 Chapter4-1-5/src/main/java/com/didispace/Application.java create mode 100644 Chapter4-1-5/src/main/java/com/didispace/async/Task.java create mode 100644 Chapter4-1-5/src/main/resources/application.properties create mode 100644 Chapter4-1-5/src/test/java/com/didispace/ApplicationTests.java diff --git a/Chapter4-1-5/pom.xml b/Chapter4-1-5/pom.xml new file mode 100644 index 0000000..524627d --- /dev/null +++ b/Chapter4-1-5/pom.xml @@ -0,0 +1,56 @@ + + + 4.0.0 + + com.didispace + Chapter4-1-5 + 1.0.0 + jar + + Chapter4-1-5 + Spring Boot project + + + org.springframework.boot + spring-boot-starter-parent + 1.5.10.RELEASE + + + + + UTF-8 + 1.8 + + + + + org.springframework.boot + spring-boot-starter + + + + org.springframework.boot + spring-boot-starter-test + test + + + + org.projectlombok + lombok + 1.16.20 + provided + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + \ No newline at end of file diff --git a/Chapter4-1-5/src/main/java/com/didispace/Application.java b/Chapter4-1-5/src/main/java/com/didispace/Application.java new file mode 100644 index 0000000..84d84ef --- /dev/null +++ b/Chapter4-1-5/src/main/java/com/didispace/Application.java @@ -0,0 +1,38 @@ +package com.didispace; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; + +import java.util.concurrent.Executor; +import java.util.concurrent.ThreadPoolExecutor; + + +@SpringBootApplication +public class Application { + + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } + + @EnableAsync + @Configuration + class TaskPoolConfig { + + @Bean("taskExecutor") + public Executor taskExecutor() { + ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); + executor.setCorePoolSize(10); + executor.setMaxPoolSize(20); + executor.setQueueCapacity(200); + executor.setKeepAliveSeconds(60); + executor.setThreadNamePrefix("taskExecutor-"); + executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); + return executor; + } + } + +} diff --git a/Chapter4-1-5/src/main/java/com/didispace/async/Task.java b/Chapter4-1-5/src/main/java/com/didispace/async/Task.java new file mode 100644 index 0000000..49f5f7e --- /dev/null +++ b/Chapter4-1-5/src/main/java/com/didispace/async/Task.java @@ -0,0 +1,32 @@ +package com.didispace.async; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.AsyncResult; +import org.springframework.stereotype.Component; + +import java.util.Random; +import java.util.concurrent.Future; + +/** + * @author 程序猿DD + * @version 1.0.0 + * @date 16/5/16 下午12:58. + * @blog http://blog.didispace.com + */ +@Slf4j +@Component +public class Task { + + public static Random random = new Random(); + + @Async("taskExecutor") + public Future run() throws Exception { + long sleep = random.nextInt(10000); + log.info("开始任务,需耗时:" + sleep + "毫秒"); + Thread.sleep(sleep); + log.info("完成任务"); + return new AsyncResult<>("test"); + } + +} diff --git a/Chapter4-1-5/src/main/resources/application.properties b/Chapter4-1-5/src/main/resources/application.properties new file mode 100644 index 0000000..e69de29 diff --git a/Chapter4-1-5/src/test/java/com/didispace/ApplicationTests.java b/Chapter4-1-5/src/test/java/com/didispace/ApplicationTests.java new file mode 100644 index 0000000..c9cd12f --- /dev/null +++ b/Chapter4-1-5/src/test/java/com/didispace/ApplicationTests.java @@ -0,0 +1,29 @@ +package com.didispace; + +import com.didispace.async.Task; +import lombok.extern.slf4j.Slf4j; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; + +@Slf4j +@RunWith(SpringJUnit4ClassRunner.class) +@SpringBootTest +public class ApplicationTests { + + @Autowired + private Task task; + + @Test + public void test() throws Exception { + Future futureResult = task.run(); + String result = futureResult.get(5, TimeUnit.SECONDS); + log.info(result); + } + +}