欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java異步調(diào)用的4種實(shí)現(xiàn)方法

 更新時(shí)間:2022年03月11日 09:34:27   作者:未月廿三  
日常開發(fā)中,會(huì)經(jīng)常遇到說,前臺(tái)調(diào)服務(wù),本文主要介紹了java異步調(diào)用的4種實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

一.利用多線程

直接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 {
                     //要執(zhí)行的業(yè)務(wù)代碼,我們這里沒有寫方法,可以讓線程休息幾秒進(jìn)行測試

                        Thread.sleep(10000);

                        System.out.print("睡夠啦~");

                    }catch(Exception e) {

                        throw new RuntimeException("報(bào)錯(cuò)啦??!");

                    }

                }

        });

    }

二.采用Spring 的異步方法去執(zhí)行(無返回值)

在啟動(dòng)類或者配置類加上 @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的異步方法中,這個(gè)方法一定要寫在Spring管理的類中,注意注解@Async

@Async注解可以用在方法上,也可以用在類上,用在類上,對類里面所有方法起作用

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

其他類調(diào)用這個(gè)方法。這里注意,一定要其他的類,如果在同類中調(diào)用,是不生效的。具體原因,可以去學(xué)習(xí)一下Spring AOP的原理

@Autowired
private AsynchronousService asynchronousService;

public void useAsynchronousMethod(){
  //我們需要執(zhí)行的代碼1
  asynchronousService.springAsynchronousMethod();
 //我們需要執(zhí)行的代碼2
}

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

先把longTimeMethod 封裝到Spring的異步方法中,這個(gè)異步方法的返回值是Future的實(shí)例。這個(gè)方法一定要寫在Spring管理的類中,注意注解@Async。

@Service
public class AsynchronousService{
  @Async
  public Future springAsynchronousMethod(){
    Integer result = longTimeMethod();
    return new AsyncResult(result);
  }
}

其他類調(diào)用這個(gè)方法。這里注意,一定要其他的類,如果在同類中調(diào)用,是不生效的。

如果調(diào)用之后接收返回值,不對返回值進(jìn)行操作則為異步操作,進(jìn)行操作則轉(zhuǎn)為同步操作,等待對返回值操作完之后,才會(huì)繼續(xù)執(zhí)行主進(jìn)程下面的流程

@Autowired
private AsynchronousService asynchronousService;

public void useAsynchronousMethod(){
    Future future = asynchronousService.springAsynchronousMethod();
    future.get(1000, TimeUnit.MILLISECONDS);
}

四.原生Future方法

//我們需要執(zhí)行的代碼1
Future future = longTimeMethod2();
//我們需要執(zhí)行的代碼2
Integer result = future.get();

可以看到,我們調(diào)用longTimeMethod2返回一個(gè)Future對象(注意了,這里的longTimeMethod2當(dāng)然不是上面的longTimeMethod),然后處理“我們需要執(zhí)行的代碼2”,到了需要返回結(jié)果的時(shí)候直接調(diào)用future.get()便能獲取到返回值。下面我們來看看longTimeMethod2如何實(shí)現(xiàn)。

private Future longTimeMethod2() {
  //創(chuàng)建線程池
  ExecutorService threadPool = Executors.newCachedThreadPool();
  //獲取異步Future對象
  Future future = threadPool.submit(new Callable() {
    @Override
    public Integer call() throwsException {
        return longTimeMethod();
    }
  });
  return future;
}

參考

原文鏈接:https://www.jianshu.com/p/51f0555b232a

到此這篇關(guān)于java異步調(diào)用的4種實(shí)現(xiàn)方法的文章就介紹到這了,更多相關(guān)java異步調(diào)用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • springboot對壓縮請求的處理方法

    springboot對壓縮請求的處理方法

    這篇文章主要介紹了springboot對壓縮請求的處理,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-05-05
  • Java 8 引入lambda表達(dá)式的原因解析

    Java 8 引入lambda表達(dá)式的原因解析

    這篇文章主要介紹了Java 8 引入lambda表達(dá)式的原因解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • Java?Guava的使用技巧整理

    Java?Guava的使用技巧整理

    Guava是Google發(fā)布的一個(gè)開源庫,主要提供了一些在Java開發(fā)中非常有用的工具類和API,不管是工作還是學(xué)習(xí)都是非常值得我們?nèi)ナ煜さ?,一起來看看?/div> 2023-03-03
  • Java中生成隨機(jī)數(shù)的4種方式與區(qū)別詳解

    Java中生成隨機(jī)數(shù)的4種方式與區(qū)別詳解

    生成隨機(jī)數(shù)是我們?nèi)粘i_發(fā)經(jīng)常會(huì)遇到的一個(gè)功能,這篇文章主要給大家介紹了關(guān)于Java中生成隨機(jī)數(shù)的4種方式與區(qū)別、應(yīng)用場景的相關(guān)資料,4個(gè)方式分別是Random、ThreadLocalRandom、SecureRandom以及Math,需要的朋友可以參考下
    2021-06-06
  • HashMap和HashTable底層原理以及常見面試題

    HashMap和HashTable底層原理以及常見面試題

    今天小編就為大家分享一篇關(guān)于HashMap和HashTable底層原理以及常見面試題,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • Java拼接list字符串的實(shí)戰(zhàn)記錄

    Java拼接list字符串的實(shí)戰(zhàn)記錄

    這篇文章主要給大家介紹了關(guān)于Java拼接list字符串的相關(guān)資料,java生產(chǎn)和開發(fā)中經(jīng)常需要將字符串List、數(shù)字List進(jìn)行拼接,以作為輸出對象或查詢條件,文中給出了代碼示例,需要的朋友可以參考下
    2023-08-08
  • JSON數(shù)據(jù)轉(zhuǎn)換成Java對象的方法

    JSON數(shù)據(jù)轉(zhuǎn)換成Java對象的方法

    就目前來講,將Java對象轉(zhuǎn)換成JSON對象還是相當(dāng)簡單的,但是 將JSON對象轉(zhuǎn)換成Java對象,就相對比較復(fù)雜了些
    2014-03-03
  • Java畢業(yè)設(shè)計(jì)之多用戶宿舍管理系統(tǒng)的實(shí)現(xiàn)

    Java畢業(yè)設(shè)計(jì)之多用戶宿舍管理系統(tǒng)的實(shí)現(xiàn)

    這篇文章主要介紹了基于Java實(shí)現(xiàn)的多用戶宿舍管理系統(tǒng),本文采用了jsp、servlet、jdbc等技術(shù),文中示例代碼講解詳細(xì),需要的可以參考一下
    2022-02-02
  • 淺談SpringCloud之zuul源碼解析

    淺談SpringCloud之zuul源碼解析

    這篇文章主要介紹了淺談SpringCloud之zuul源碼解析,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-02-02
  • centos7如何通過systemctl啟動(dòng)springboot服務(wù)代替java -jar方式啟動(dòng)

    centos7如何通過systemctl啟動(dòng)springboot服務(wù)代替java -jar方式啟動(dòng)

    這篇文章主要介紹了centos7如何通過systemctl啟動(dòng)springboot服務(wù)代替java -jar方式啟動(dòng),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2024-01-01

最新評(píng)論