Java8 基于spring @Async方法和Lambda实现任意代码块异步执行
顶
原
荐
w
wailouci
发布于 昨天 15:01字数 349
阅读 78
收藏 6
参与百度AI开发者大赛赢75万奖金+25万奖品,(提供教程)加群:418589053 >>>
使用jdk8有一段时间了,经常到stream和lambda操作集合,项目一般也都使用的是spring framework系列。借助lambda可以实现类似 python 闭包的写法,传递代码块给方法,异步方法加让lambda就可以实现任意代码块的异步执行。
首先定一个接口用来执行异步代码块
public interface AsyncService { void asyncInvoke(AsyncExec consumer) throws WxErrorException; @FunctionalInterface interface AsyncExec { void exec() throws WxErrorException; } }
给一个实现并交给spring容器管理
import me.chanjar.weixin.common.exception.WxErrorException; @Service public class AsyncServiceImpl implements AsyncService { @Async @Override public 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; @Test public 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); } }
测试结果
结果显示测试成功了,从log的线程名看他们代码块中的是异步线程命,并没有安装代码顺序执行,11111111和22222222主线程执行完毕后,异步方法才执行。
© 著作权归作者所有
共有人打赏支持
相关文章 最新文章
目录 “Hello World!” 同步执行 异步执行 响应执行 “Hello World!” 下面是一个通过实现接口 的一个Hello World 示例: 点击查看详细源码 等价于 一个等效的Hello World解决方案,使用 代替...
java_龙
05/17
0
0
在Java中有许多已有的接口都需要封装代码块,例如:Runnable或者Comparator。lambda表达式与这些接口是向后兼容的。对于只包含一个抽象方法的接口,你可以通过lambda表达式来创建该接口的对象...
柳哥
2015/05/21
0
0
最近一直找java8相关新特性的文章,发现都太没有一个连贯性,毕竟大家写博客肯定都有自己的侧重点,这里找到一本书,专门介绍java8新特性的,感觉大家可以看看《写给大忙人看的JavaSE8》.这里...
阳光温暖
08/04
0
0
Java8(https://book.douban.com/subject/26772632/) 引入更多编程概念、编程工具,简洁、灵活地编写代码。 优化步骤: 1)进一步复用代码,抽取公共的逻辑代码,参数化可变的逻辑代码 2)声明...
v1-alpha
2016/12/16
20
0
前几天在reddit上看到Java8 M8 Developer Preview版本已经发布了,不免想要尝鲜一把。Developer Preview版本已经所有Feature都完成了,Java8的特性可以在这里看到http://openjdk.java.net/p...
黄亿华
2013/09/15
0
11
没有更多内容
加载失败,请刷新页面
加载更多概述 前文写了关于Nginx环境配置,但是还没有完,接下来将会继续讲三个相关的配置 主要是以下三个 1.Nginx访问日志 2.Nginx日志切割 3.静态文件不记录日志和过期时间 Nginx访问日志 1.先看看...
杉下
今天
1
0
var map = {}; // Map map = new HashMap(); map[key] = value; // map.put(key, value); var value = map[key]; // Object value = map.get(key); var has = key in map; // boolean has = ......
SuperDabai
今天
0
0
public static void main(String[] args) {String hex = "0xdbf3accc683297cf0000";BigInteger amount = new BigInteger(hex.substring(2), 16);System.out.println(amount);......
任梁荣
昨天
2
0
Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @真Skr小机灵鬼儿:8.13分享Jocelyn Pook/Russian Red的单曲《Loving Strangers》 《Loving Strangers》- Jocelyn Pook/Russian Red 手机党少...
小小编辑
昨天
14
4
转载 TypeScript基础入门 - 函数 - 剩余参数 项目实践仓库 https://github.com/durban89/typescript_demo.gittag: 1.2.1 为了保证后面的学习演示需要安装下ts-node,这样后面的每个操作都能...
durban
昨天
1
0
没有更多内容
加载失败,请刷新页面
加载更多以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- iphone – 异步函数执行?
- JavaScript 同步和异步(执行机制)
- Netty推荐addListener回调异步执行
- Promise面试题2实现异步串行执行
- Golang 异步任务执行器——Gochan
- [Java并发-16] CompletionService:批量执行异步任务
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。