,,java异步调用的4种实现方法

,,java异步调用的4种实现方法

日常开发中,经常说前台调用服务。本文主要介绍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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: