日常开发中,经常说前台调用服务。本文主要介绍java异步调用的四种实现方法,通过实例代码详细介绍,具有一定的参考价值。感兴趣的朋友可以参考一下。
:
目录
1.使用多线程直接使用新线程的线程池。2.使用Spring的异步方法执行(无返回值)@Async注释可以用在方法或类上,它作用于类中的所有方法。3.使用Spring的异步方法Future来接收返回值。如果在调用后收到返回值,如果不对返回值进行操作,就是异步操作。如果执行了操作,就会同步,主进程下面的进程会继续,直到完成对返回值的操作。四。本机未来方法参考。
一.利用多线程
直接new线程
线程t=新线程(){
@覆盖
公共无效运行(){
long time method();
}
};
使用线程池
private ExecutorService executor=executors . newcachedthreadpool();
公共void fun()抛出异常{
executor.submit(new Runnable(){
@覆盖
公共无效运行(){
尝试{
//对于要执行的业务代码,我们这里没有编写方法。您可以让线程休息几秒钟进行测试。
thread . sleep(10000);
System.out.print('充足睡眠~ ');
}catch(异常e) {
引发新的RuntimeException('报告了错误!');
}
}
});
}
二.采用Spring 的异步方法去执行(无返回值)
向启动类或配置类添加@EnableAsync批注。
包me . de weixu . aysncdemo;
导入org . spring framework . boot . spring application;
导入org . spring framework . boot . auto configure . spring boot application;
import org . spring framework . scheduling . annotation . enable async;
@启用异步
@SpringBootApplication
公共类AysncDemoApplication {
公共静态void main(String[] args) {
spring application . run(aysncdemoapplication . class,args);
}
}
首先将longTimeMethod封装到Spring的异步方法中。这个方法必须写在Spring管理的类中。请注意@Async。
@Async注解可以用在方法上,也可以用在类上,用在类上,对类里面所有方法起作用
@服务
公共类异步服务{
@Async
public void springAsynchronousMethod(){
long time method();
}
}
其他类调用此方法。这里很重要的一点是,其他类如果在同一个类中调用,是不会生效的。具体原因可以学习Spring AOP的原理
@自动连线
私有异步服务异步服务;
public void useAsynchronousMethod(){
//我们需要执行的代码1
asynchronous service . spring asynchronous method();
//我们需要执行的代码2
}
三.采用Spring 的异步方法+Future接收返回值
先把longTimeMethod封装到Spring的异步方法中,这个异步方法的返回值是Future的一个实例。这个方法必须写在Spring管理的类中。注意@Async。
@服务
公共类异步服务{
@Async
public Future springAsynchronousMethod(){
整数result=long time method();
返回新的AsyncResult(结果);
}
}
其他类调用此方法。这里很重要的一点是,其他类如果在同一个类中调用,是不会生效的。
如果调用之后接收返回值,不对返回值进行操作则为异步操作,进行操作则转为同步操作,等待对返回值操作完之后,才会继续执行主进程下面的流程
@自动连线
私有异步服务异步服务;
public void useAsynchronousMethod(){
future future=asynchronous service . spring asynchronous method();
future.get(1000,时间单位。毫秒);
}
四.原生Future方法
//我们需要执行的代码1
future future=longtime method 2();
//我们需要执行的代码2
整数result=future . get();
可以看到,我们调用longTimeMethod2返回一个Future对象(注意这里的longTimeMethod2当然不是上面的longTimeMethod),然后处理“我们需要执行的代码2”。当需要返回结果时,我们可以直接调用future.get()来获取返回值。我们来看看longTimeMethod2是如何实现的。
私有未来longTimeMethod2() {
//创建线程池
ExecutorService thread pool=executors . newcachedthreadpool();
//获取异步未来对象
future future=thread pool . submit(new Callable(){
@覆盖
公共整数调用()抛出异常{
返回long time method();
}
});
回报未来;
}
参考
原文链接:https://www.jianshu.com/p/51f0555b232a
以上就是本文关于java异步调用的四种实现方法。更多相关java异步调用内容,请搜索我们之前的文章或者继续浏览下面的相关文章。希望大家以后能多多支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。