java 异步调用方法_java异步调用方法有哪些?如何实现异步调用?
你知道java異步調用方法都有哪些嗎?下面的文章內容,就對這方面的問題做了一下整理,一起來看看java異步調用的方法吧!
1、利用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注解能夠在方法上使用,也能夠在類上,用在類上,對類當中的所有方法起作用。@Servicepublic?class?AsynchronousService{??@Async
public?void?springAsynchronousMethod(){
longTimeMethod();
}
}
其他類調用該方法。
注意了,一定要其他的類,假如,在同類中調用,那么是不會生效的。
至于為什么會這樣,大家對Spring AOP的實現原理進行一下了解。@Autowired
private?AsynchronousService?asynchronousService;
public?void?useAsynchronousMethod()
{
//我們需要執行的代碼1
asynchronousService.springAsynchronousMethod();
//我們需要執行的代碼2
}
二、原生Future方法//我們需要執行的代碼1
Future?future?=?longTimeMethod2();
//我們需要執行的代碼2
Integer?result?=?future.get();
調用longTimeMethod2返回一個Future對象,之后處理需要執行的代碼2,到需要返回結果時,直接調用future.get(),就可以獲取到返回值。
再一起來看看如何實現longTimeMethod2。private?Future?longTimeMethod2()
{
//創建線程池
ExecutorService?threadPool?=?Executors.newCachedThreadPool();
//獲取異步Future對象
Future?future?=?threadPool.submit(new?Callable()
{
@Override
public?Integer?call()?throwsException
{
return?longTimeMethod();
}
});
return?future;
}
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("報錯啦!!");
}
}
});
}
四、Spring的異步方法和Future接收返回值
將longTimeMethod封裝到Spring的異步方法當中。
這里的異步方法的返回值是Future的實例。
這個方法必須要寫在Spring管理的類當中。
注意注解@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);
}
java異步調用方法你都了解了吧,更多相關內容,請繼續來奇Q工具網的java架構師欄目進行了解吧。
推薦閱讀:
總結
以上是生活随笔為你收集整理的java 异步调用方法_java异步调用方法有哪些?如何实现异步调用?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 男宝宝起名的三大思路
- 下一篇: 偷梁换柱 暗渡陈仓 一招搞定360安全卫