推广 热搜: csgo  vue  angelababy  2023  gps  新车  htc  落地  app  p2p 

Java调用的4种实现方法:采用的异步方法

   2023-05-31 网络整理佚名1230
核心提示:采用的异步方法去执行(无返回值)三.采用的异步方法+接收返回值四.的异步方法去执行(无返回值)封装到的异步方法中,这个方法一定要写在管理的类中,注意注解@Async其他类调用这个方法。的异步方法+接收返回值封装到的异步方法中,这个异步方法的返回值是的实例。其他类调用这个方法。如果调用之后接收返回值,不对返回值进行操作则为异步操作,进行操作则转为同步操作,等待对返回值操作完之后,才会继续执行主进程下面的流程

目录 2.用于执行的异步方法(无返回值) 3.使用的异步方法+接收返回值 4.方法引用

1.使用多线程直接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("报错啦!!");
                    }
                }
        });
    }

2.用于执行的异步方法(无返回值)

在启动类或配置类中添加@注解。

package me.deweixu.aysncdemo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
imppiEhqtYYVDort org.springframework.scheduling.annotation.EnableAsync;
@EnableAsync
@SpringBootApplication
public class AysncDemoApplication {
 public static void main(String[] args) {
  SpringApplication.run(AysncDemoApplication.class, args);
 }
}

首先封装异步方法,这个方法一定要写在管理类中,注意注解@Async

@Async 注解可以用在方法上,也可以用在类上,用在类上,作用于类中的所有方法

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

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

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

3.使用的异步方法+接收返回值

先封装到异步方法中,这个异步方法的返回值是一个实例。 这个方法一定要写在托管类中,注意注解@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);
}

4.原生方法

//我们需要执行的代码1
Future future = longTimeMethod2();
//我们需要执行的代码2
Integer result = future.get();

可以看出,我们调用返回一个对象(注意,当然不是上面的),然后处理“我们需要执行的代码2”,需要返回结果的时候直接调用.get即可() 得到返回值。 让我们看看如何去做。

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

参考

原文链接:

Java异步调用的四种实现方法,本文到此结束。 更多关于Java异步调用的内容,请搜索我们之前的文章或者继续浏览下面的相关文章。 希望大家以后多多支持!

本文标题:java异步调用的4种实现方法

 
标签: 返回值
反对 0举报 0 收藏 0 打赏 0评论 0
 
更多>同类资讯
推荐图文
推荐资讯
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报
Powered By DESTOON