java 异步调用方法_java异步调用方法有哪些?如何实现异步调用?
你知道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异步调用方法有哪些?如何实现异步调用?相关推荐
- java 类名方法_Java学习——根据类名获取方法名,并调用方法
最近在项目中调用mybatis获取到了实体类对象,但是我们需要从实体类对象中取属性值,所以这里就需要以下几点知识: 1.根据Object对象获取类名 2.根据类对象获取所有的对象方法名 3.根据方法名 ...
- c调用其他类的方法_Java 的 Native 方法——今天又进步了
1. 简介 1.1 个人理解 初次遇见 native 是在 java.lang.String 源码中的一个 intern 方法: public native String intern(); 因为还是 ...
- java方法重载和重载方法_Java 8的方法参考进一步限制了重载
java方法重载和重载方法 方法重载一直是一个充满喜忧参半的话题. 我们已经在博客上介绍了它,并介绍了几次警告: 您会后悔对Lambdas应用重载! 保持干燥:方法重载 为什么每个人都讨厌操作员超载 ...
- java默认代码地址_Java 8默认方法可能会破坏您的(用户)代码
java默认代码地址 乍一看, 默认方法为Java虚拟机的指令集带来了一个很棒的新功能. 最后,库开发人员能够开发已建立的API,而不会对其用户代码造成不兼容性. 使用默认方法,当将新方法引入该接口时 ...
- 怎么让java技术变强_java中的方法
方法是什么? 方法是可以完成某个特定的功能的并且可以被重复利用的代码片段,方法的出现,让代码有了很强大复用性 方法定义: [修饰符列表] 返回值类型 方法名(形式参数列表){ 方法体; } 形式参数列 ...
- java中方法_java中的方法
java中的方法 java作为一种面向对象的语言,具有以下特性:继承.封装.多态.抽象.类.对象.实例.方法和重载. 今天讲解的是java方法的概念. 什么是方法? java方法是语句的集合,他们在一 ...
- java反射方法_java反射之方法反射的基本操作方法
本文接上文"java反射之获取类的信息方法(推荐)",利用反射(invoke)来获取一个类中的方法来执行. 1.定义一个类,包含三个名称相同,参数不同的方法 class A{ pu ...
- java calendar.add方法_Java Calendar add()方法与示例
日历类add()方法add()方法在java.util包中可用. add()方法用于对指定的cal_fi(日历字段)执行相加或相减的时间量. add()方法是一个非静态方法,可通过类对象访问,如果尝试 ...
- Java 中array.size()_Java ArrayDeque size()方法与示例
ArrayDeque类size()方法size()方法在java.lang包中可用. size()方法用于返回存储在此双端队列中的大小(元素数). size()方法是一个非静态方法,只能通过类对象访问 ...
- java printstream 覆盖了_Java PrintStream clearError()方法与示例
PrintStream ClassclearError()方法clearError()方法在java.io包中可用. clearError()方法用于清除此PrintStream的内部错误状态. cl ...
最新文章
- 泛型Dictionary的用法详解
- spring mvc学习(42):restful的编辑功能实现
- C#动态操作DataTable(新增行、列、查询行、列等)
- MongoDB 4.2 内核解析 - Change Stream
- linux文件系统 tty who 环境变量 获取帮助
- mysql启动失败“MySQL Daemon failed to start”
- leetcode 456. 132 Pattern 132模式 题解(栈)
- Trick(十)——any/all 实现
- Atitti.dw cc 2015 绿色版本安装总结
- 数据分析案例——航空公司客户价值分析
- 中小企业OA系统如何选型?OA软件选型必看技巧
- GIF制作软件哪个好,怎么制作搞笑GIF
- flutter开发的ios应用没法通过爱思等工具浏览文件目录Document
- OpenCV参考手册之Mat类详解(三)
- 计算机系统集成及运维,信息系统集成资质取消!ITSS或将取代其招投标地位!...
- python测试代码报错:Ran 0 test in 0.00s
- MIT_单变量微积分_18
- iOS之 2020年最新苹果移动设备屏幕的大小和系统
- IDEA中的clean,清除项目缓存
- 1、OPenGL ES - 简介、iOS中GLKit简单应用