原 荐 Java8 基于spring @Async方法和Lambda实现任意代码块异步执行

栏目: 编程语言 · Java · 发布时间: 5年前

原 荐  <a href='https://www.codercto.com/topics/22013.html'>Java</a> 8 基于spring @Async方法和Lambda实现任意代码块异步执行

Java8 基于spring @Async方法和Lambda实现任意代码块异步执行

w

wailouci

发布于 昨天 15:01

字数 349

阅读 78

收藏 6

Spring Java

参与百度AI开发者大赛赢75万奖金+25万奖品,(提供教程)加群:418589053 >>> 原 荐 Java8 基于spring @Async方法和Lambda实现任意代码块异步执行

使用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);
        }
    }

测试结果

原 荐 Java8 基于spring @Async方法和Lambda实现任意代码块异步执行

结果显示测试成功了,从log的线程名看他们代码块中的是异步线程命,并没有安装代码顺序执行,11111111和22222222主线程执行完毕后,异步方法才执行。

© 著作权归作者所有

共有人打赏支持

w

wailouci

粉丝 2

博文 1

码字总数 349

作品 0

浦东

相关文章 最新文章

教程:一起学习Hystrix--Hystrix命令执行

目录 “Hello World!” 同步执行 异步执行 响应执行 “Hello World!” 下面是一个通过实现接口 的一个Hello World 示例: 点击查看详细源码 等价于 一个等效的Hello World解决方案,使用 代替...

java_龙

05/17

0

0

java8之lambda表达式(函数式接口)

在Java中有许多已有的接口都需要封装代码块,例如:Runnable或者Comparator。lambda表达式与这些接口是向后兼容的。对于只包含一个抽象方法的接口,你可以通过lambda表达式来创建该接口的对象...

柳哥

2015/05/21

0

0

java8新特性(二)_lambda表达式

最近一直找java8相关新特性的文章,发现都太没有一个连贯性,毕竟大家写博客肯定都有自己的侧重点,这里找到一本书,专门介绍java8新特性的,感觉大家可以看看《写给大忙人看的JavaSE8》.这里...

阳光温暖

08/04

0

0

《Java8实战》读书笔记

Java8(https://book.douban.com/subject/26772632/) 引入更多编程概念、编程工具,简洁、灵活地编写代码。 优化步骤: 1)进一步复用代码,抽取公共的逻辑代码,参数化可变的逻辑代码 2)声明...

v1-alpha

2016/12/16

20

0

名词王国里的新政-解读Java8之lambda表达式

前几天在reddit上看到Java8 M8 Developer Preview版本已经发布了,不免想要尝鲜一把。Developer Preview版本已经所有Feature都完成了,Java8的特性可以在这里看到http://openjdk.java.net/p...

黄亿华

2013/09/15

0

11

没有更多内容

加载失败,请刷新页面

加载更多

下一页

(三)Nginx配置·续

概述 前文写了关于Nginx环境配置,但是还没有完,接下来将会继续讲三个相关的配置 主要是以下三个 1.Nginx访问日志 2.Nginx日志切割 3.静态文件不记录日志和过期时间 Nginx访问日志 1.先看看...

杉下

今天

1

0

jquery创建类似于java的map

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

java大数据转换16进制转10进制

public static void main(String[] args) {String hex = "0xdbf3accc683297cf0000";BigInteger amount = new BigInteger(hex.substring(2), 16);System.out.println(amount);......

任梁荣

昨天

2

0

OSChina 周六乱弹 —— 目测我们 程序员 丁克的几率不大

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @真Skr小机灵鬼儿:8.13分享Jocelyn Pook/Russian Red的单曲《Loving Strangers》 《Loving Strangers》- Jocelyn Pook/Russian Red 手机党少...

小小编辑

昨天

14

4

原 荐 Java8 基于spring @Async方法和Lambda实现任意代码块异步执行
TypeScript基础入门 - 函数 - 剩余参数

转载 TypeScript基础入门 - 函数 - 剩余参数 项目实践仓库 https://github.com/durban89/typescript_demo.gittag: 1.2.1 为了保证后面的学习演示需要安装下ts-node,这样后面的每个操作都能...

durban

昨天

1

0

没有更多内容

加载失败,请刷新页面

加载更多

下一页


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Python编程初学者指南

Python编程初学者指南

[美]Michael Dawson / 王金兰 / 人民邮电出版社 / 2014-10-1

Python是一种解释型、面向对象、动态数据类型的高级程序设计语言。Python可以用于很多的领域,从科学计算到游戏开发。 《Python编程初学者指南》尝试以轻松有趣的方式来帮助初学者掌握Python语言和编程技能。《Python编程初学者指南》共12章,每一章都会用一个完整的游戏来演示其中的关键知识点,并通过编写好玩的小软件这种方式来学习编程,引发读者的兴趣,降低学习的难度。每章最后都会......一起来看看 《Python编程初学者指南》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

SHA 加密
SHA 加密

SHA 加密工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具