你知道java异步调用方法都有哪些吗?下面的文章内容,就对这方面的问题做了一下整理,一起来看看java异步调用的方法吧!

1、利用Spring的异步方法去执行

注:没有返回值

在启动类又或者是配置类加上@EnableAsync注解。package me.deweixu.aysncdemo;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.scheduling.annotation.EnableAsync;

@EnableAsync

@SpringBootApplication

public class AysncDemoApplication

{

public static void main(String[] args)

{

SpringApplication.run(AysncDemoApplication.class, args);

}

}

先将longTimeMethod封装到Spring的异步方法当中。

这样的方法必须要写在Spring管理的类当中。

还要注意注解@Async。

@Async注解能够在方法上使用,也能够在类上,用在类上,对类当中的所有方法起作用。@Servicepublic class AsynchronousService{  @Async

public void springAsynchronousMethod(){

longTimeMethod();

}

}

其他类调用该方法。

注意了,一定要其他的类,假如,在同类中调用,那么是不会生效的。

至于为什么会这样,大家对Spring AOP的实现原理进行一下了解。@Autowired

private AsynchronousService asynchronousService;

public void useAsynchronousMethod()

{

//我们需要执行的代码1

asynchronousService.springAsynchronousMethod();

//我们需要执行的代码2

}

二、原生Future方法//我们需要执行的代码1

Future future = longTimeMethod2();

//我们需要执行的代码2

Integer result = future.get();

调用longTimeMethod2返回一个Future对象,之后处理需要执行的代码2,到需要返回结果时,直接调用future.get(),就可以获取到返回值。

再一起来看看如何实现longTimeMethod2。private Future longTimeMethod2()

{

//创建线程池

ExecutorService threadPool = Executors.newCachedThreadPool();

//获取异步Future对象

Future future = threadPool.submit(new Callable()

{

@Override

public Integer call() throwsException

{

return longTimeMethod();

}

});

return future;

}

new线程Thread t = new Thread()

{

@Override

public void run()

{

longTimeMethod();

}

};private ExecutorService executor = Executors.newCachedThreadPool();

public void fun() throws Exception

{

executor.submit(new Runnable()

{

@override

public void run()

{

try

{

//要执行的业务代码,我们这里没有写方法,可以让线程休息几秒进行测试

Thread.sleep(10000);

System.out.print("睡够啦~");

}

catch (Exception e)

{

throw new RuntimeException("报错啦!!");

}

}

});

}

四、Spring的异步方法和Future接收返回值

将longTimeMethod封装到Spring的异步方法当中。

这里的异步方法的返回值是Future的实例。

这个方法必须要写在Spring管理的类当中。

注意注解@Async。@Service

public class AsynchronousService

{

@Async

public Future springAsynchronousMethod()

{

Integer result = longTimeMethod();

return new AsyncResult(result);

}

}

其他类调用这个方法。

这里要注意一下,一定要其他的类,假如在同类当中的话,是不可以生效的。

假如,调用之后接收返回值,不对返回值进行操作则为异步操作,进行操作就转为同步操作,等待对返回值操作完之后,才会继续执行主进程下面的流程。@Autowired

private AsynchronousService asynchronousService;

public void useAsynchronousMethod()

{

Future future = asynchronousService.springAsynchronousMethod();

future.get(1000, TimeUnit.MILLISECONDS);

}

java异步调用方法你都了解了吧,更多相关内容,请继续来奇Q工具网的java架构师栏目进行了解吧。

推荐阅读:

java 异步调用方法_java异步调用方法有哪些?如何实现异步调用?相关推荐

  1. java 类名方法_Java学习——根据类名获取方法名,并调用方法

    最近在项目中调用mybatis获取到了实体类对象,但是我们需要从实体类对象中取属性值,所以这里就需要以下几点知识: 1.根据Object对象获取类名 2.根据类对象获取所有的对象方法名 3.根据方法名 ...

  2. c调用其他类的方法_Java 的 Native 方法——今天又进步了

    1. 简介 1.1 个人理解 初次遇见 native 是在 java.lang.String 源码中的一个 intern 方法: public native String intern(); 因为还是 ...

  3. java方法重载和重载方法_Java 8的方法参考进一步限制了重载

    java方法重载和重载方法 方法重载一直是一个充满喜忧参半的话题. 我们已经在博客上介绍了它,并介绍了几次警告: 您会后悔对Lambdas应用重载! 保持干燥:方法重载 为什么每个人都讨厌操作员超载 ...

  4. java默认代码地址_Java 8默认方法可能会破坏您的(用户)代码

    java默认代码地址 乍一看, 默认方法为Java虚拟机的指令集带来了一个很棒的新功能. 最后,库开发人员能够开发已建立的API,而不会对其用户代码造成不兼容性. 使用默认方法,当将新方法引入该接口时 ...

  5. 怎么让java技术变强_java中的方法

    方法是什么? 方法是可以完成某个特定的功能的并且可以被重复利用的代码片段,方法的出现,让代码有了很强大复用性 方法定义: [修饰符列表] 返回值类型 方法名(形式参数列表){ 方法体; } 形式参数列 ...

  6. java中方法_java中的方法

    java中的方法 java作为一种面向对象的语言,具有以下特性:继承.封装.多态.抽象.类.对象.实例.方法和重载. 今天讲解的是java方法的概念. 什么是方法? java方法是语句的集合,他们在一 ...

  7. java反射方法_java反射之方法反射的基本操作方法

    本文接上文"java反射之获取类的信息方法(推荐)",利用反射(invoke)来获取一个类中的方法来执行. 1.定义一个类,包含三个名称相同,参数不同的方法 class A{ pu ...

  8. java calendar.add方法_Java Calendar add()方法与示例

    日历类add()方法add()方法在java.util包中可用. add()方法用于对指定的cal_fi(日历字段)执行相加或相减的时间量. add()方法是一个非静态方法,可通过类对象访问,如果尝试 ...

  9. Java 中array.size()_Java ArrayDeque size()方法与示例

    ArrayDeque类size()方法size()方法在java.lang包中可用. size()方法用于返回存储在此双端队列中的大小(元素数). size()方法是一个非静态方法,只能通过类对象访问 ...

  10. java printstream 覆盖了_Java PrintStream clearError()方法与示例

    PrintStream ClassclearError()方法clearError()方法在java.io包中可用. clearError()方法用于清除此PrintStream的内部错误状态. cl ...

最新文章

  1. 泛型Dictionary的用法详解
  2. spring mvc学习(42):restful的编辑功能实现
  3. C#动态操作DataTable(新增行、列、查询行、列等)
  4. MongoDB 4.2 内核解析 - Change Stream
  5. linux文件系统 tty who 环境变量 获取帮助
  6. mysql启动失败“MySQL Daemon failed to start”
  7. leetcode 456. 132 Pattern 132模式 题解(栈)
  8. Trick(十)——any/all 实现
  9. Atitti.dw cc 2015 绿色版本安装总结
  10. 数据分析案例——航空公司客户价值分析
  11. 中小企业OA系统如何选型?OA软件选型必看技巧
  12. GIF制作软件哪个好,怎么制作搞笑GIF
  13. flutter开发的ios应用没法通过爱思等工具浏览文件目录Document
  14. OpenCV参考手册之Mat类详解(三)
  15. 计算机系统集成及运维,信息系统集成资质取消!ITSS或将取代其招投标地位!...
  16. python测试代码报错:Ran 0 test in 0.00s
  17. MIT_单变量微积分_18
  18. iOS之 2020年最新苹果移动设备屏幕的大小和系统
  19. IDEA中的clean,清除项目缓存
  20. 1、OPenGL ES - 简介、iOS中GLKit简单应用

热门文章

  1. 压缩感知基本概括——三大基本问题
  2. JAVA中FC什么意思_java – 位掩码的规则是什么?像0xFF vs. 0xFC
  3. Android中Uri和path file三者的相互转换
  4. R6025 pure virtual function call
  5. OkHttp基础概念解释
  6. InDesign 教程:如何对齐和分组内容?
  7. 新帽式滑环应用安防高速球机
  8. CA-SSH-DHCP服务实现
  9. 计算机评级为A的学校,全国第四轮学科评估结果(A+、A类学校)
  10. 华为od统一考试B卷【迷宫问题】Python 实现