当前位置: 首页 > news >正文

站内免费推广的方式有哪些财务公司代理记账业务

站内免费推广的方式有哪些,财务公司代理记账业务,万网 网站 ip,国内专门做酒的网站有哪些你是否曾经遇到过在SpringBoot中Async注解无法正常工作的问题?今天,我们用函数式接口来解决这个问题。 一、什么是函数式接口? 函数式接口(Functional Interface)是 Java 8 中引入的一个概念,是指只包含一…

你是否曾经遇到过在SpringBoot中@Async注解无法正常工作的问题?今天,我们用函数式接口来解决这个问题。

一、什么是函数式接口?

函数式接口(Functional Interface)是 Java 8 中引入的一个概念,是指只包含一个抽象方法的接口。这种接口的设计简化了代码,提高了代码的可读性和可维护性。通过函数式接口,我们可以将一段代码传递给其他方法进行调用。可以通过Lambda表达式来创建函数式接口的对象。

二、函数式接口进行异步调用

之前有文章介绍了使用CompletableFuture进行异步编程,但有时候我们只需要一种更简洁的方法。

在SpringBoot中,我们经常使用@Async注解来进行异步调用。然而有些情况@Async注解会失效,如:静态方法、调用方和被调方在同一个类中。此时,我们可以使用函数式接口来解决这个问题。

首先定义一个函数式接口:

@FunctionalInterface
public interface AsyncInvoker {void exec();
}

函数式接口里面的抽象方法名称随意,如:exec()、run()等,但一个函数式接口只允许定义一个方法,否则IDE会提示错误。

然后通过一个简单的示例了解函数式接口的基本使用:

public static void main(String[] args) {AsyncInvoker asyncInvoker = new AsyncInvoker() {@Overridepublic void exec()System.out.println("asyncInvoker exec");}};asyncInvoker.exec();
}

上述代码,通过匿名内部类的形式创建一个接口实例,并且在匿名内部类中直接完成exec()方法的实现,然后调用函数接口。

我们的目标是要实现异步调用。因此,我们将函数式接口及其调用封装成组件,在调用方法上使用@Async注解以实现异步:

@Component
public class AsyncUtil {@FunctionalInterfacepublic interface Invoker {void exec();}@Async("asyncExecutor")public void invoke(Invoker invoker) {invoker.exec();}
}

如果希望在异步调用中使用Spring事务,可以在上述组件中添加一个带@Transactional注解的方法用于有事务的异步调用:

@Transactional
@Async("asyncExecutor")
public void transInvoke(Invoker invoker) {invoker.exec();
}

最后别忘了创建一个异步调用线程池:

@Bean("asyncExecutor")
public TaskExecutor executor() {ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();executor.setCorePoolSize(corePoolSize); //核心线程数executor.setMaxPoolSize(maxPoolSize);  //最大线程数executor.setQueueCapacity(queueCapacity); //队列大小executor.setKeepAliveSeconds(keepAliveSeconds); //线程最大空闲时间executor.setThreadNamePrefix(threadNamePrefix); //新创建的线程名称的前缀executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());return executor;
}

在需要进行异步调用的业务组件中,我们只需注入前面创建的组件AsyncUtil,然后就可以轻松地对同一个类中的方法进行异步调用。这是通过Lambda表达式来实现的,它替换了前面案例中的匿名内部类,使代码更加简洁。Lambda表达式实际上就是一个匿名函数,它的引入让 Java 8 的代码更加优雅。以下是一个示例:

asyncUtil.invoke(() -> {// 这是一段异步逻辑System.out.println("asyncUtil invoke");
});

三、总结

函数式接口是 Java 8 中引入的一个亮点,它可以帮助我们简化代码。不妨尝试一下函数式接口,让你的代码变得更加优雅!

http://www.yayakq.cn/news/195129/

相关文章:

  • 商业网站设计与制作论文关于网页制作的毕业设计
  • 全新正版营销网站宁波正规seo快速排名公司
  • 购物网站建立mysql进程太多wordpress
  • 佛山用户网站建站如何做网站路径分析
  • 安徽建设银行招聘网站搜索点击软件
  • 网站建设图片教程视频教程wordpress开发cms
  • 网上那些彩票网站可以自己做吗什么是网站后台
  • 2w网站建设模式如何做好网站站内优化
  • 个人网站 用什么域名小型企业oa办公系统
  • 邵阳做网站的有哪些学做预算有网站吗
  • 用模块做网站用asp做的大型网站
  • 广州网站建设知名乐云seo公司 网站建设
  • xx汽车企业网站和信息化建设土特产网站平台建设
  • 新加坡的网站域名谷歌三件套一键安装
  • 怎样查网站有没有做CDN加速外贸公司网站大全
  • 工商注册网站模板wordpress换行不显示
  • 最世网络建设网站可以吗长春有几个区
  • 商城网站制作公司地址微信公众号对接wordpress教程
  • 百度权重查询爱站网网站开发页面设计报价
  • 怎么用程序做网站网站推广对接
  • 教育培训机构网站源码貴阳建设银行网站
  • 宁波企业网站制作推荐搭建网页平台
  • 济南网站推广网站建设公司论坛
  • 甘肃省住房和城乡建设厅注册中心网站首页常州比较有名的设计公司
  • 建设大学网站费用免费网站奖励自己游戏
  • 网站搭建工具的种类阳江本地最新招聘信息
  • 海南综合网站两学一做电视夜校广东网站建设网
  • 网站开发的可行性研究报告网站建设用户需求
  • 网站收录作用lnmp搬家wordpress
  • 怎么建一个卖东西的网站模板网站制作平台