springboot异步处理
@EnableAsync
@SpringBootApplication
@EnableAsync //开启异步
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
@Async
WorkService.class
@Component
public class WorkService {
private static final Logger logger = LoggerFactory.getLogger(WorkService.class);
@Async //通过Future<String>返回异步调用结果
public Future<String> work1() throws InterruptedException {
logger.info("work1 is working ");
Thread.sleep(2000);
return new AsyncResult<>("work1 is done");
}
@Async
public Future<String> work2() throws InterruptedException {
logger.info("work2 is working ");
Thread.sleep(2000);
return new AsyncResult<>("work2 is done");
}
@Async
public Future<String> work3() throws InterruptedException {
logger.info("work3 is working ");
Thread.sleep(2000);
return new AsyncResult<>("work3 is done");
}
}
注意: @Async修饰的方法不能定义成static
类型,否则不生效。
测试类
@RunWith(SpringRunner.class)
@SpringBootTest
public class Client {
@Autowired
private WorkService workService;
@Test
public void main() throws InterruptedException {
long start = System.currentTimeMillis();
Future<String> work1 = workService.work1();
Future<String> work2 = workService.work2();
Future<String> work3 = workService.work3();
while (true){
if(work1.isDone()&&work2.isDone()&&work3.isDone()){
break;
}
}
long end = System.currentTimeMillis();
System.out.println("耗时 " +(end -start));
}
}
注意: workService如果是new
的,则不生效
。