使用 jdk8 有一段时间了, 经常到 stream 和 lambda 操作集合, 项目一般也都使用的是 spring framework 系列. 借助 lambda 可以实现类似 python 闭包的写法, 传递代码块给方法, 异步方法加让 lambda 就可以实现任意代码块的异步执行. 转载原文请见 https://www.jgayb.cn/?p=140
首先定一个接口用来执行异步代码块
- public interface AsyncService { void asyncInvoke(AsyncExec consumer) throws WxErrorException;
- @FunctionalInterfaceinterface AsyncExec {
- void exec() throws WxErrorException;
- }
- }
给一个实现并交给 spring 容器管理
- @Service
- public class AsyncServiceImpl implements AsyncService {
- @Async
- @Overridepublic
- void asyncInvoke(AsyncExec asyncExec) throws WxErrorException {
- asyncExec.exec();
- }
- }
简单测试一下
- @RunWith(SpringRunner.class)
- @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
- @ActiveProfiles("dev")
- @Slf4j
- public class AsyncServiceTest {
- @Autowired
- private AsyncService asyncService;
- @Testpublic void asyncServiceTest() throws WxErrorException, InterruptedException {
- log.info("111111111111111");
- asyncService.asyncInvoke(() -> {
- try {
- Thread.sleep(1000);
- log.info("异步方法执行");
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- });
- log.info("222222222222222");
- Thread.sleep(2000);
- }
- }
测试结果
单元测试截图
来源: http://www.jianshu.com/p/feed47619089