一.利用多线程

直接new线程

Thread t = new Thread(){@Overridepublic void run() {longTimeMethod();}
};

使用线程池

private ExecutorService executor = Executors.newCachedThreadPool() ;public void fun() throws Exception {executor.submit(new Runnable(){@overridepublic void run() {try {//要执行的业务代码,我们这里没有写方法,可以让线程休息几秒进行测试Thread.sleep(10000);System.out.print("睡够啦~");}catch(Exception e) {throw new RuntimeException("报错啦!!");}}});}

二.采用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注解可以用在方法上,也可以用在类上,用在类上,对类里面所有方法起作用

@Service
public class AsynchronousService{@Asyncpublic void springAsynchronousMethod(){longTimeMethod();}
}

其他类调用这个方法。这里注意,一定要其他的类,如果在同类中调用,是不生效的。具体原因,可以去学习一下Spring AOP的原理

@Autowired
private AsynchronousService asynchronousService;public void useAsynchronousMethod(){//我们需要执行的代码1asynchronousService.springAsynchronousMethod();//我们需要执行的代码2
}

三.采用Spring 的异步方法+Future接收返回值

先把longTimeMethod 封装到Spring的异步方法中,这个异步方法的返回值是Future的实例。这个方法一定要写在Spring管理的类中,注意注解@Async。

@Service
public class AsynchronousService{@Asyncpublic 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);
}

四.原生Future方法

我们需要执行的代码1

Future future = longTimeMethod2();

我们需要执行的代码2

Integer result = future.get();

可以看到,我们调用longTimeMethod2返回一个Future对象(注意了,这里的longTimeMethod2当然不是上面的longTimeMethod),然后处理“我们需要执行的代码2”,到了需要返回结果的时候直接调用future.get()便能获取到返回值。下面我们来看看longTimeMethod2如何实现。

private Future longTimeMethod2() {//创建线程池ExecutorService threadPool = Executors.newCachedThreadPool();//获取异步Future对象Future future = threadPool.submit(new Callable() {@Overridepublic Integer call() throwsException {return longTimeMethod();}});return future;
}

Java异步执行方法相关推荐

  1. java异步执行任务

    java异步执行可以使用线程,或者第三方消息中间件,如mq: 线程池的使用: package com.example.demo.ExecutorTest;import java.util.concur ...

  2. java 异步调用方法_java异步调用方法有哪些?如何实现异步调用?

    你知道java异步调用方法都有哪些吗?下面的文章内容,就对这方面的问题做了一下整理,一起来看看java异步调用的方法吧! 1.利用Spring的异步方法去执行 注:没有返回值 在启动类又或者是配置类加 ...

  3. Spring Boot 之异步执行方法

    给方法加上 @Async 注解 package me.deweixu.aysncdemo.service; public interface AsyncService {void asyncMetho ...

  4. js等待异步执行完再执行_Spring Boot 之异步执行方法

    前言: 最近的时候遇到一个需求,就是当服务器接到请求并不需要任务执行完成才返回结果,可以立即返回结果,让任务异步的去执行.开始考虑是直接启一个新的线程去执行任务或者把任务提交到一个线程池去执行,这两种 ...

  5. C#异步执行方法的几种方式

    C#异步编程资料 基于任务的异步模式 (TAP) 是基于 System.Threading.Tasks 命名空间中的 System.Threading.Tasks.Task 和 System.Thre ...

  6. STL库(C++11)提供的异步执行方法的方式

    在进行并发编程的时候难免会遇到异步执行时候,现代C++标准库提供了几种异步执行的方式,本文收集整理了一下,以备将来翻阅. Thread方式 Thread 是STL提供的一种快捷创建线程的方式,极大方便 ...

  7. java异步执行--

    通过创建线程方式实现: public static void main(String[] args) throws Exception{System.out.println(" <== ...

  8. java条件执行方法_java 开启多线程里面如何加条件判断执行其他逻辑?

    方法1:通过Thread类中的isAlive()方法判断线程是否处于活动状态. 线程启动后,只要没有运行完毕,都会返回true. [注]如果只是要等其他线程运行结束之后再继续操作,可以执行t.join ...

  9. java 定时执行方法_Java定时执行任务 方法总结

    JAVA技巧(Java定时执行任务的实现方法)2009年02月07日 星期六 10:36定时执行任务的三种方法: 1)java.util.Timer. 2)ServletContextListener ...

最新文章

  1. UVa LA 3882 - And Then There Was One 递推,动态规划 难度: 2
  2. Codeforce 1182B Plus from Picture
  3. 基于Spring开发的DUBBO服务接口测试
  4. aix内核是linux,查看Linux及AIX硬件信息方法总结
  5. 学编程面试通不过_我从编程面试中学到了什么
  6. nginx 默认网站根目录在哪里
  7. 2011年SSCI收录信息科学与图书馆学学科期刊86种
  8. 搭建离线版keras中文文档
  9. 作业五:结对项目-四则运算 “软件”之升级版
  10. 电脑网络连接正常,但浏览器无法打开网页的原因和解决方法
  11. C语言程序代码 25 编程实现将任意一个华氏法表示的温度,转换为以摄氏法表示的温度。
  12. informix 访问mysql_C语言访问INFORMIX数据库
  13. 【Python训练营】Python每日一练----第28天:鲁卡斯队列(round函数用法)
  14. VMware虚拟机与物理机网络互通
  15. 支付宝当面付之扫码支付“无效签名”
  16. PHPMyWind支持PowerPoint上传
  17. C语言函数及复杂数据结构的综合应用——简单户籍管理系统
  18. react-diagram 序列化Json解读
  19. 快应用开发1--编译官方的代码并在手机上运行rpk文件(Windows系统上)
  20. N0.29——黑客技巧第一招:断网

热门文章

  1. Alembic 编译之Error: ilmbase libraries (Half, Iex, IlmThread, Imath) not found
  2. c# winform 打印机控制帮助类
  3. 我的世界服务器修改生物属性,我的世界属性调整成什么_我的世界1.9内容生物属性调整攻略_快吧手游...
  4. 关于object[ 变量],arry[变量]
  5. 入门Python爬虫开发-欧阳桫-专题视频课程
  6. 蓝桥杯——十六进制转八进制(Java解法)
  7. java代码重构的思路Java代码重构的几种模式
  8. 当您在malloc之后不释放时,真正发生了什么?
  9. Python 计算机视觉(补充版)—— 图像特效中的油画效果
  10. VMware虚拟机 安装Ubuntu22.04 详细教程