最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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)行測(cè)試

                        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注解可以用在方法上,也可以用在類上,用在類上,對(duì)類里面所有方法起作用

@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)用之后接收返回值,不對(duì)返回值進(jìn)行操作則為異步操作,進(jìn)行操作則轉(zhuǎn)為同步操作,等待對(duì)返回值操作完之后,才會(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對(duì)象(注意了,這里的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對(duì)象
  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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot?熱搜與不雅文字過濾的實(shí)現(xiàn)

    SpringBoot?熱搜與不雅文字過濾的實(shí)現(xiàn)

    本文主要介紹了SpringBoot?熱搜與不雅文字過濾的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • SpringBoot的啟動(dòng)過程源碼詳細(xì)分析

    SpringBoot的啟動(dòng)過程源碼詳細(xì)分析

    這篇文章主要介紹了SpringBoot的啟動(dòng)過程源碼詳細(xì)分析,SpringBoot啟動(dòng)的時(shí)候,會(huì)構(gòu)造一個(gè)SpringApplication的實(shí)例,構(gòu)造SpringApplication的時(shí)候會(huì)進(jìn)行初始化的工作,需要的朋友可以參考下
    2023-11-11
  • Java內(nèi)置GUI Frame類的使用

    Java內(nèi)置GUI Frame類的使用

    這篇文章主要介紹了Java內(nèi)置GUI Frame類的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • java中對(duì)象為null時(shí)的打印輸出方式

    java中對(duì)象為null時(shí)的打印輸出方式

    這篇文章主要介紹了java中對(duì)象為null時(shí)的打印輸出方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Java多例Bean的應(yīng)用場(chǎng)景-easyExcel導(dǎo)入

    Java多例Bean的應(yīng)用場(chǎng)景-easyExcel導(dǎo)入

    EasyExcel 是一個(gè)基于 Java 的簡(jiǎn)單、省內(nèi)存的讀寫 Excel 的開源項(xiàng)目。這篇文章主要介紹了用easyExcel導(dǎo)入Java Bean的應(yīng)用場(chǎng)景,感興趣的朋友可以參考閱讀
    2023-04-04
  • SpringBoot Maven升級(jí)自帶的jar包版本問題

    SpringBoot Maven升級(jí)自帶的jar包版本問題

    這篇文章主要介紹了SpringBoot Maven升級(jí)自帶的jar包版本問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Java實(shí)戰(zhàn)之OutOfMemoryError異常問題及解決方法

    Java實(shí)戰(zhàn)之OutOfMemoryError異常問題及解決方法

    這篇文章主要介紹了Java實(shí)戰(zhàn)之OutOfMemoryError異常,主要結(jié)合著深入理解Java虛擬機(jī)一書當(dāng)中整理了本篇內(nèi)容,感興趣的朋友一起看看吧
    2022-04-04
  • Mybatis中的高級(jí)映射一對(duì)一、一對(duì)多、多對(duì)多

    Mybatis中的高級(jí)映射一對(duì)一、一對(duì)多、多對(duì)多

    這篇文章主要介紹了Mybatis中的高級(jí)映射一對(duì)一、一對(duì)多、多對(duì)多的相關(guān)資料,需要的朋友可以參考下
    2016-08-08
  • java使用反射訪問成員變量的值示例

    java使用反射訪問成員變量的值示例

    這篇文章主要介紹了java使用反射訪問成員變量的值,結(jié)合實(shí)例形式分析了java基于反射機(jī)制操作類成員變量相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2019-07-07
  • SpringBoot集成內(nèi)存數(shù)據(jù)庫Derby的實(shí)踐

    SpringBoot集成內(nèi)存數(shù)據(jù)庫Derby的實(shí)踐

    像H2、hsqldb、derby、sqlite這樣的內(nèi)存數(shù)據(jù)庫,小巧可愛,做小型服務(wù)端演示程序,非常好用。最大特點(diǎn)就是不需要你另外安裝一個(gè)數(shù)據(jù)庫。本文主要介紹了SpringBoot集成內(nèi)存數(shù)據(jù)庫Derby,感興趣的可以了解一下
    2021-09-09

最新評(píng)論

时尚| 屯昌县| 龙岩市| 溆浦县| 嫩江县| 抚州市| 桂平市| 慈利县| 泸溪县| 鄄城县| 威海市| 威海市| 新河县| 深泽县| 岑巩县| 申扎县| 清远市| 长岭县| 屏东市| 长岭县| 贵德县| 渭南市| 诸城市| 玉龙| 琼中| 垫江县| 满洲里市| 博乐市| 罗甸县| 皮山县| 青川县| 柯坪县| 莎车县| 黄骅市| 正蓝旗| 奉化市| 滨海县| 中宁县| 永修县| 宁国市| 团风县|