三十三、Spring Boot实现异步调用

#                          Spring Boot实现异步调用

开启异步调用:

package com.yang;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;

@SpringBootApplication
@EnableScheduling//开启定时任务
@EnableAsync//开启异步调用
public class DubboSpringBootApplication {

	public static void main(String[] args) {
		SpringApplication.run(DubboSpringBootApplication.class, args);
	}
}

声明可被异步调用的方法:

package com.yang.task;

import java.util.concurrent.Future;

import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.AsyncResult;
import org.springframework.stereotype.Component;

@Component
public class AsyncTask {
	//@Async所修饰的函数不要定义为static类型,这样异步调用不会生效
	//异步回调不返回数据
	@Async
	public void dealNoReturnTask(){
		
		System.out.println("Thread {} deal No Return Task start"
		                    + "    "
				            +Thread.currentThread().getName());
		try {
		    Thread.sleep(3000);
		} catch (InterruptedException e) {
		    e.printStackTrace();
		}
		System.out.println("Thread {} deal No Return Task end at {}"+"    "
		                    +Thread.currentThread().getName()+"    "
				            +System.currentTimeMillis());
	 }
	
	
	
	//异步回调返回数据
	@Async
	public Future<String> dealHaveReturnTask() {
		try {
		    Thread.sleep(3000);
		} catch (InterruptedException e) {
		    e.printStackTrace();
		}		
		return new AsyncResult<String>("异步回调返回数据!");
	}
}

测试:

//不带返回值的异步回调
 asyncTask.dealNoReturnTask();
  try {
  	    System.out.println("begin to deal other Task!");
    Thread.sleep(10000);
  } catch (InterruptedException e) {
   e.printStackTrace();
  }
  
  
//带返回值的异步回调
//用future.get()来获取异步任务的返回结果
Future<String> future = asyncTask.dealHaveReturnTask();
System.out.println("begin to deal other Task!");
 while (true) {
  if(future.isCancelled()){
	  System.out.println("deal async task is Cancelled");
      break;
  }
  if (future.isDone() ) {
	  System.out.println("deal async task is Done");
	  System.out.println("return result is " + future.get());
      break;
  }
  System.out.println("wait async task to end ...");
  Thread.sleep(1000);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值