在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

異步神器CompletableFuture萬字詳解!

jf_ro2CN3Fa ? 來源:CSDN ? 作者:CSDN ? 2022-11-15 10:15 ? 次閱讀


CompletableFuture是jdk8的新特性。CompletableFuture實現了CompletionStage接口和Future接口,前者是對后者的一個擴展,增加了異步會點、流式處理、多個Future組合處理的能力,使Java在處理多任務的協同工作時更加順暢便利。

一、創建異步任務

1. supplyAsync

supplyAsync是創建帶有返回值的異步任務。它有如下兩個方法,一個是使用默認線程池(ForkJoinPool.commonPool())的方法,一個是帶有自定義線程池的重載方法

//帶返回值異步請求,默認線程池
publicstaticCompletableFuturesupplyAsync(Suppliersupplier)

//帶返回值的異步請求,可以自定義線程池
publicstaticCompletableFuturesupplyAsync(Suppliersupplier,Executorexecutor)

測試代碼:

publicstaticvoidmain(String[]args)throwsExecutionException,InterruptedException{
CompletableFuturecf=CompletableFuture.supplyAsync(()->{
System.out.println("dosomething....");
return"result";
});

//等待任務執行完成
System.out.println("結果->"+cf.get());
}


publicstaticvoidmain(String[]args)throwsExecutionException,InterruptedException{
//自定義線程池
ExecutorServiceexecutorService=Executors.newSingleThreadExecutor();
CompletableFuturecf=CompletableFuture.supplyAsync(()->{
System.out.println("dosomething....");
return"result";
},executorService);

//等待子任務執行完成
System.out.println("結果->"+cf.get());
}

測試結果:

90bc4a4e-648a-11ed-8abf-dac502259ad0.png

2. runAsync

runAsync是創建沒有返回值的異步任務。它有如下兩個方法,一個是使用默認線程池(ForkJoinPool.commonPool())的方法,一個是帶有自定義線程池的重載方法

//不帶返回值的異步請求,默認線程池
publicstaticCompletableFuturerunAsync(Runnablerunnable)

//不帶返回值的異步請求,可以自定義線程池
publicstaticCompletableFuturerunAsync(Runnablerunnable,Executorexecutor)

測試代碼:

publicstaticvoidmain(String[]args)throwsExecutionException,InterruptedException{
CompletableFuturecf=CompletableFuture.runAsync(()->{
System.out.println("dosomething....");
});

//等待任務執行完成
System.out.println("結果->"+cf.get());
}


publicstaticvoidmain(String[]args)throwsExecutionException,InterruptedException{
//自定義線程池
ExecutorServiceexecutorService=Executors.newSingleThreadExecutor();
CompletableFuturecf=CompletableFuture.runAsync(()->{
System.out.println("dosomething....");
},executorService);

//等待任務執行完成
System.out.println("結果->"+cf.get());
}

測試結果:

90e0da4e-648a-11ed-8abf-dac502259ad0.png

3.獲取任務結果的方法

//如果完成則返回結果,否則就拋出具體的異常
publicTget()throwsInterruptedException,ExecutionException

//最大時間等待返回結果,否則就拋出具體異常
publicTget(longtimeout,TimeUnitunit)throwsInterruptedException,ExecutionException,TimeoutException

//完成時返回結果值,否則拋出unchecked異常。為了更好地符合通用函數形式的使用,如果完成此CompletableFuture所涉及的計算引發異常,則此方法將引發unchecked異常并將底層異常作為其原因
publicTjoin()

//如果完成則返回結果值(或拋出任何遇到的異常),否則返回給定的valueIfAbsent。
publicTgetNow(TvalueIfAbsent)

//如果任務沒有完成,返回的值設置為給定值
publicbooleancomplete(Tvalue)

//如果任務沒有完成,就拋出給定異常
publicbooleancompleteExceptionally(Throwableex)

基于 Spring Boot + MyBatis Plus + Vue & Element 實現的后臺管理系統 + 用戶小程序,支持 RBAC 動態權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能

  • 項目地址:https://github.com/YunaiV/ruoyi-vue-pro
  • 視頻教程:https://doc.iocoder.cn/video/

二、異步回調處理

1. thenApply和thenApplyAsync

thenApply 表示某個任務執行完成后執行的動作,即回調方法,會將該任務的執行結果即方法返回值作為入參傳遞到回調方法中,帶有返回值。

測試代碼:

publicstaticvoidmain(String[]args)throwsExecutionException,InterruptedException{
CompletableFuturecf1=CompletableFuture.supplyAsync(()->{
System.out.println(Thread.currentThread()+"cf1dosomething....");
return1;
});

CompletableFuturecf2=cf1.thenApplyAsync((result)->{
System.out.println(Thread.currentThread()+"cf2dosomething....");
result+=2;
returnresult;
});
//等待任務1執行完成
System.out.println("cf1結果->"+cf1.get());
//等待任務2執行完成
System.out.println("cf2結果->"+cf2.get());
}

publicstaticvoidmain(String[]args)throwsExecutionException,InterruptedException{
CompletableFuturecf1=CompletableFuture.supplyAsync(()->{
System.out.println(Thread.currentThread()+"cf1dosomething....");
return1;
});

CompletableFuturecf2=cf1.thenApply((result)->{
System.out.println(Thread.currentThread()+"cf2dosomething....");
result+=2;
returnresult;
});
//等待任務1執行完成
System.out.println("cf1結果->"+cf1.get());
//等待任務2執行完成
System.out.println("cf2結果->"+cf2.get());
}

測試結果:

9114db50-648a-11ed-8abf-dac502259ad0.png 914c3bd6-648a-11ed-8abf-dac502259ad0.png

從上面代碼和測試結果我們發現thenApply和thenApplyAsync區別在于,使用thenApply方法時子任務與父任務使用的是同一個線程,而thenApplyAsync在子任務中是另起一個線程執行任務,并且thenApplyAsync可以自定義線程池,默認的使用ForkJoinPool.commonPool()線程池。

2. thenAccept和thenAcceptAsync

thenAccep表示某個任務執行完成后執行的動作,即回調方法,會將該任務的執行結果即方法返回值作為入參傳遞到回調方法中,無返回值。

測試代碼

publicstaticvoidmain(String[]args)throwsExecutionException,InterruptedException{
CompletableFuturecf1=CompletableFuture.supplyAsync(()->{
System.out.println(Thread.currentThread()+"cf1dosomething....");
return1;
});

CompletableFuturecf2=cf1.thenAccept((result)->{
System.out.println(Thread.currentThread()+"cf2dosomething....");
});

//等待任務1執行完成
System.out.println("cf1結果->"+cf1.get());
//等待任務2執行完成
System.out.println("cf2結果->"+cf2.get());
}


publicstaticvoidmain(String[]args)throwsExecutionException,InterruptedException{
CompletableFuturecf1=CompletableFuture.supplyAsync(()->{
System.out.println(Thread.currentThread()+"cf1dosomething....");
return1;
});

CompletableFuturecf2=cf1.thenAcceptAsync((result)->{
System.out.println(Thread.currentThread()+"cf2dosomething....");
});

//等待任務1執行完成
System.out.println("cf1結果->"+cf1.get());
//等待任務2執行完成
System.out.println("cf2結果->"+cf2.get());
}

測試結果:

915c4ad0-648a-11ed-8abf-dac502259ad0.png 917f8ce8-648a-11ed-8abf-dac502259ad0.png從上面代碼和測試結果我們發現thenAccep和thenAccepAsync區別在于,使用thenAccep方法時子任務與父任務使用的是同一個線程,而thenAccepAsync在子任務中可能是另起一個線程執行任務,并且thenAccepAsync可以自定義線程池,默認的使用ForkJoinPool.commonPool()線程池。

3.thenRun和thenRunAsync

thenRun表示某個任務執行完成后執行的動作,即回調方法,無入參,無返回值。

測試代碼:

publicstaticvoidmain(String[]args)throwsExecutionException,InterruptedException{
CompletableFuturecf1=CompletableFuture.supplyAsync(()->{
System.out.println(Thread.currentThread()+"cf1dosomething....");
return1;
});

CompletableFuturecf2=cf1.thenRun(()->{
System.out.println(Thread.currentThread()+"cf2dosomething....");
});

//等待任務1執行完成
System.out.println("cf1結果->"+cf1.get());
//等待任務2執行完成
System.out.println("cf2結果->"+cf2.get());
}

publicstaticvoidmain(String[]args)throwsExecutionException,InterruptedException{
CompletableFuturecf1=CompletableFuture.supplyAsync(()->{
System.out.println(Thread.currentThread()+"cf1dosomething....");
return1;
});

CompletableFuturecf2=cf1.thenRunAsync(()->{
System.out.println(Thread.currentThread()+"cf2dosomething....");
});

//等待任務1執行完成
System.out.println("cf1結果->"+cf1.get());
//等待任務2執行完成
System.out.println("cf2結果->"+cf2.get());
}

測試結果:

919bd614-648a-11ed-8abf-dac502259ad0.png91aa1882-648a-11ed-8abf-dac502259ad0.png

從上面代碼和測試結果我們發現thenRun和thenRunAsync區別在于,使用thenRun方法時子任務與父任務使用的是同一個線程,而thenRunAsync在子任務中可能是另起一個線程執行任務,并且thenRunAsync可以自定義線程池,默認的使用ForkJoinPool.commonPool()線程池。

4.whenComplete和whenCompleteAsync

whenComplete是當某個任務執行完成后執行的回調方法,會將執行結果或者執行期間拋出的異常傳遞給回調方法,如果是正常執行則異常為null,回調方法對應的CompletableFuture的result和該任務一致,如果該任務正常執行,則get方法返回執行結果,如果是執行異常,則get方法拋出異常。

測試代碼:

publicstaticvoidmain(String[]args)throwsExecutionException,InterruptedException{
CompletableFuturecf1=CompletableFuture.supplyAsync(()->{
System.out.println(Thread.currentThread()+"cf1dosomething....");
inta=1/0;
return1;
});

CompletableFuturecf2=cf1.whenComplete((result,e)->{
System.out.println("上個任務結果:"+result);
System.out.println("上個任務拋出異常:"+e);
System.out.println(Thread.currentThread()+"cf2dosomething....");
});

////等待任務1執行完成
//System.out.println("cf1結果->"+cf1.get());
////等待任務2執行完成
System.out.println("cf2結果->"+cf2.get());
}

測試結果:

91b85c44-648a-11ed-8abf-dac502259ad0.png

whenCompleteAsync和whenComplete區別也是whenCompleteAsync可能會另起一個線程執行任務,并且thenRunAsync可以自定義線程池,默認的使用ForkJoinPool.commonPool()線程池。

5.handle和handleAsync

跟whenComplete基本一致,區別在于handle的回調方法有返回值。

測試代碼:

publicstaticvoidmain(String[]args)throwsExecutionException,InterruptedException{
CompletableFuturecf1=CompletableFuture.supplyAsync(()->{
System.out.println(Thread.currentThread()+"cf1dosomething....");
//inta=1/0;
return1;
});

CompletableFuturecf2=cf1.handle((result,e)->{
System.out.println(Thread.currentThread()+"cf2dosomething....");
System.out.println("上個任務結果:"+result);
System.out.println("上個任務拋出異常:"+e);
returnresult+2;
});

//等待任務2執行完成
System.out.println("cf2結果->"+cf2.get());
}

測試結果 :

91dba032-648a-11ed-8abf-dac502259ad0.png

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 實現的后臺管理系統 + 用戶小程序,支持 RBAC 動態權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能

  • 項目地址:https://github.com/YunaiV/yudao-cloud
  • 視頻教程:https://doc.iocoder.cn/video/

三、多任務組合處理

1. thenCombine、thenAcceptBoth 和runAfterBoth

這三個方法都是將兩個CompletableFuture組合起來處理,只有兩個任務都正常完成時,才進行下階段任務。

區別:thenCombine會將兩個任務的執行結果作為所提供函數的參數,且該方法有返回值;thenAcceptBoth同樣將兩個任務的執行結果作為方法入參,但是無返回值;runAfterBoth沒有入參,也沒有返回值。注意兩個任務中只要有一個執行異常,則將該異常信息作為指定任務的執行結果。

測試代碼:

publicstaticvoidmain(String[]args)throwsExecutionException,InterruptedException{
CompletableFuturecf1=CompletableFuture.supplyAsync(()->{
System.out.println(Thread.currentThread()+"cf1dosomething....");
return1;
});

CompletableFuturecf2=CompletableFuture.supplyAsync(()->{
System.out.println(Thread.currentThread()+"cf2dosomething....");
return2;
});

CompletableFuturecf3=cf1.thenCombine(cf2,(a,b)->{
System.out.println(Thread.currentThread()+"cf3dosomething....");
returna+b;
});

System.out.println("cf3結果->"+cf3.get());
}

publicstaticvoidmain(String[]args)throwsExecutionException,InterruptedException{
CompletableFuturecf1=CompletableFuture.supplyAsync(()->{
System.out.println(Thread.currentThread()+"cf1dosomething....");
return1;
});

CompletableFuturecf2=CompletableFuture.supplyAsync(()->{
System.out.println(Thread.currentThread()+"cf2dosomething....");
return2;
});

CompletableFuturecf3=cf1.thenAcceptBoth(cf2,(a,b)->{
System.out.println(Thread.currentThread()+"cf3dosomething....");
System.out.println(a+b);
});

System.out.println("cf3結果->"+cf3.get());
}

publicstaticvoidmain(String[]args)throwsExecutionException,InterruptedException{
CompletableFuturecf1=CompletableFuture.supplyAsync(()->{
System.out.println(Thread.currentThread()+"cf1dosomething....");
return1;
});

CompletableFuturecf2=CompletableFuture.supplyAsync(()->{
System.out.println(Thread.currentThread()+"cf2dosomething....");
return2;
});

CompletableFuturecf3=cf1.runAfterBoth(cf2,()->{
System.out.println(Thread.currentThread()+"cf3dosomething....");
});

System.out.println("cf3結果->"+cf3.get());
}

測試結果:

91f51922-648a-11ed-8abf-dac502259ad0.png9211a330-648a-11ed-8abf-dac502259ad0.png

92274e9c-648a-11ed-8abf-dac502259ad0.png 2.applyToEither、acceptEither和runAfterEither

這三個方法和上面一樣也是將兩個CompletableFuture組合起來處理,當有一個任務正常完成時,就會進行下階段任務。

區別:applyToEither會將已經完成任務的執行結果作為所提供函數的參數,且該方法有返回值;acceptEither同樣將已經完成任務的執行結果作為方法入參,但是無返回值;runAfterEither沒有入參,也沒有返回值。

測試代碼:

publicstaticvoidmain(String[]args)throwsExecutionException,InterruptedException{
CompletableFuturecf1=CompletableFuture.supplyAsync(()->{
try{
System.out.println(Thread.currentThread()+"cf1dosomething....");
Thread.sleep(2000);
}catch(InterruptedExceptione){
e.printStackTrace();
}
return"cf1任務完成";
});

CompletableFuturecf2=CompletableFuture.supplyAsync(()->{
try{
System.out.println(Thread.currentThread()+"cf2dosomething....");
Thread.sleep(5000);
}catch(InterruptedExceptione){
e.printStackTrace();
}
return"cf2任務完成";
});

CompletableFuturecf3=cf1.applyToEither(cf2,(result)->{
System.out.println("接收到"+result);
System.out.println(Thread.currentThread()+"cf3dosomething....");
return"cf3任務完成";
});

System.out.println("cf3結果->"+cf3.get());
}


publicstaticvoidmain(String[]args)throwsExecutionException,InterruptedException{
CompletableFuturecf1=CompletableFuture.supplyAsync(()->{
try{
System.out.println(Thread.currentThread()+"cf1dosomething....");
Thread.sleep(2000);
}catch(InterruptedExceptione){
e.printStackTrace();
}
return"cf1任務完成";
});

CompletableFuturecf2=CompletableFuture.supplyAsync(()->{
try{
System.out.println(Thread.currentThread()+"cf2dosomething....");
Thread.sleep(5000);
}catch(InterruptedExceptione){
e.printStackTrace();
}
return"cf2任務完成";
});

CompletableFuturecf3=cf1.acceptEither(cf2,(result)->{
System.out.println("接收到"+result);
System.out.println(Thread.currentThread()+"cf3dosomething....");
});

System.out.println("cf3結果->"+cf3.get());
}

publicstaticvoidmain(String[]args)throwsExecutionException,InterruptedException{
CompletableFuturecf1=CompletableFuture.supplyAsync(()->{
try{
System.out.println(Thread.currentThread()+"cf1dosomething....");
Thread.sleep(2000);
}catch(InterruptedExceptione){
e.printStackTrace();
}
System.out.println("cf1任務完成");
return"cf1任務完成";
});

CompletableFuturecf2=CompletableFuture.supplyAsync(()->{
try{
System.out.println(Thread.currentThread()+"cf2dosomething....");
Thread.sleep(5000);
}catch(InterruptedExceptione){
e.printStackTrace();
}
System.out.println("cf2任務完成");
return"cf2任務完成";
});

CompletableFuturecf3=cf1.runAfterEither(cf2,()->{
System.out.println(Thread.currentThread()+"cf3dosomething....");
System.out.println("cf3任務完成");
});

System.out.println("cf3結果->"+cf3.get());
}

測試結果:

92418438-648a-11ed-8abf-dac502259ad0.png925d7cc4-648a-11ed-8abf-dac502259ad0.png

從上面可以看出cf1任務完成需要2秒,cf2任務完成需要5秒,使用applyToEither組合兩個任務時,只要有其中一個任務完成時,就會執行cf3任務,顯然cf1任務先完成了并且將自己任務的結果傳值給了cf3任務,cf3任務中打印了接收到cf1任務完成,接著完成自己的任務,并返回cf3任務完成;acceptEither和runAfterEither類似,acceptEither會將cf1任務的結果作為cf3任務的入參,但cf3任務完成時并無返回值;runAfterEither不會將cf1任務的結果作為cf3任務的入參,它是沒有任務入參,執行完自己的任務后也并無返回值。

2. allOf / anyOf

allOf:CompletableFuture是多個任務都執行完成后才會執行,只有有一個任務執行異常,則返回的CompletableFuture執行get方法時會拋出異常,如果都是正常執行,則get返回null。

anyOf :CompletableFuture是多個任務只要有一個任務執行完成,則返回的CompletableFuture執行get方法時會拋出異常,如果都是正常執行,則get返回執行完成任務的結果。

測試代碼:

publicstaticvoidmain(String[]args)throwsExecutionException,InterruptedException{
CompletableFuturecf1=CompletableFuture.supplyAsync(()->{
try{
System.out.println(Thread.currentThread()+"cf1dosomething....");
Thread.sleep(2000);
}catch(InterruptedExceptione){
e.printStackTrace();
}
System.out.println("cf1任務完成");
return"cf1任務完成";
});

CompletableFuturecf2=CompletableFuture.supplyAsync(()->{
try{
System.out.println(Thread.currentThread()+"cf2dosomething....");
inta=1/0;
Thread.sleep(5000);
}catch(InterruptedExceptione){
e.printStackTrace();
}
System.out.println("cf2任務完成");
return"cf2任務完成";
});

CompletableFuturecf3=CompletableFuture.supplyAsync(()->{
try{
System.out.println(Thread.currentThread()+"cf2dosomething....");
Thread.sleep(3000);
}catch(InterruptedExceptione){
e.printStackTrace();
}
System.out.println("cf3任務完成");
return"cf3任務完成";
});

CompletableFuturecfAll=CompletableFuture.allOf(cf1,cf2,cf3);
System.out.println("cfAll結果->"+cfAll.get());
}


publicstaticvoidmain(String[]args)throwsExecutionException,InterruptedException{
CompletableFuturecf1=CompletableFuture.supplyAsync(()->{
try{
System.out.println(Thread.currentThread()+"cf1dosomething....");
Thread.sleep(2000);
}catch(InterruptedExceptione){
e.printStackTrace();
}
System.out.println("cf1任務完成");
return"cf1任務完成";
});

CompletableFuturecf2=CompletableFuture.supplyAsync(()->{
try{
System.out.println(Thread.currentThread()+"cf2dosomething....");
Thread.sleep(5000);
}catch(InterruptedExceptione){
e.printStackTrace();
}
System.out.println("cf2任務完成");
return"cf2任務完成";
});

CompletableFuturecf3=CompletableFuture.supplyAsync(()->{
try{
System.out.println(Thread.currentThread()+"cf2dosomething....");
Thread.sleep(3000);
}catch(InterruptedExceptione){
e.printStackTrace();
}
System.out.println("cf3任務完成");
return"cf3任務完成";
});

CompletableFuturecfAll=CompletableFuture.anyOf(cf1,cf2,cf3);
System.out.println("cfAll結果->"+cfAll.get());
}

		

測試結果:

9278b9a8-648a-11ed-8abf-dac502259ad0.png928fa848-648a-11ed-8abf-dac502259ad0.png

審核編輯 :李倩


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 接口
    +關注

    關注

    33

    文章

    8667

    瀏覽量

    151524
  • 線程
    +關注

    關注

    0

    文章

    505

    瀏覽量

    19715

原文標題:一網打盡:異步神器 CompletableFuture 萬字詳解!

文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    單日獲客成本超20,國產大模型開卷200萬字以上的長文本處理

    電子發燒友網報道(文/周凱揚)隨著AGI生態的蓬勃發展,各種支持多模態的大模型推陳出新,比如最近比較火的音樂大模型Suno和文生視頻大模型Sora等等。然而在傳統基于文本的大語言模型上,除了追求更快更精準的推理和高并發流量以外,似乎已經沒有太多值得廠商大肆宣傳的特性了,直到最近超長文本處理的爆火。 ? 國產大模型的新卷法,長文本處理 ? 當下將大模型長文本處理炒熱的,無疑是來自月之暗面的Kimi。作為去年發布的大模型,Kimi的主要
    的頭像 發表于 03-27 00:53 ?3422次閱讀
    單日獲客成本超20<b class='flag-5'>萬</b>,國產大模型開卷200<b class='flag-5'>萬字</b>以上的長文本處理

    萬字長文,看懂激光基礎知識!

    深入介紹激光基礎知識,幫助您輕松理解激光領域的關鍵概念和原理。
    的頭像 發表于 12-20 09:49 ?204次閱讀
    <b class='flag-5'>萬字</b>長文,看懂激光基礎知識!

    套接socket包含哪些參數

    套接(Socket)是計算機網絡中最基本的通信抽象,它定義了兩個進程間通信的端點。在TCP/IP協議棧中,套接是實現網絡通信的核心組件。 套接的基本概念 套接是一種通信端點,它
    的頭像 發表于 08-16 11:02 ?532次閱讀

    第三篇-V1.5 TB6612電機pwm控制STM32智能小車 STM32F103C8T6單片機

    通過合理的硬件設計和詳細的視頻筆記介紹,硬件使用STM32F103主控資料多方便學習,通過3萬字筆記、12多個小時視頻、20多章節代碼手把手教會你如何開發和調試。
    的頭像 發表于 08-12 18:29 ?1696次閱讀
    第三篇-V1.5 TB6612電機pwm控制STM32智能小車 STM32F103C8T6單片機

    第一篇:V1.5-STM32f103c8t6智能小車筆記 標準庫開發 6612電機驅動新手入門項目

    這是全網最詳細、性價比最高的STM32實戰項目入門教程,通過合理的硬件設計和詳細的視頻筆記介紹,硬件使用STM32F103主控資料多方便學習,通過3萬字筆記、12多個小時視頻、20多章節代碼手把手教會你如何開發和調試。讓你更快掌握嵌入式系統開發。
    的頭像 發表于 08-12 18:25 ?1713次閱讀
    第一篇:V1.5-STM32f103c8t6智能小車筆記 標準庫開發 6612電機驅動新手入門項目

    Java CompletableFuture 異步超時實現探索

    簡介 JDK 8 中 CompletableFuture 沒有超時中斷任務的能力?,F有做法強依賴任務自身的超時實現。本文提出一種異步超時實現方案,解決上述問題。 前言 JDK 8 是一次重大的版本
    的頭像 發表于 07-25 14:06 ?398次閱讀

    1.3萬字!詳解半導體先進封裝行業,現狀及發展趨勢!

    共賞好劇 ? 導 讀?? 在以人工智能、高性能計算為代表的新需求驅動下,先進封裝應運而生,發展趨勢是小型化、高集成度,歷經直插型封裝、表面貼裝、面積陣列封裝、2.5D/3D封裝和異構集成四個發展階段。 典型封裝技術包括:1)倒片封裝(Flip-Chip):芯片倒置,舍棄金屬引線,利用凸塊連接;2)扇入型/扇出型封裝(Fan-In/Fan-Out):在晶圓上進行整體封裝,成本更低,關鍵工藝為重新布線(RDL);3)2.5D/3D封裝:2.5D封裝中芯片位于硅中介層上,3D封裝舍
    的頭像 發表于 07-03 08:44 ?2059次閱讀
    1.3<b class='flag-5'>萬字</b>!<b class='flag-5'>詳解</b>半導體先進封裝行業,現狀及發展趨勢!

    萬字長文淺談系統穩定性建設

    流程:需求階段,研發階段,測試階段,上線階段,運維階段;整個流程中的所有參與人員:產品,研發,測試,運維人員都應關注系統的穩定性。業務的發展及系統建設過程中,穩定性就是那個1,其他的是1后面的0,沒有穩定性,就好比將
    的頭像 發表于 07-02 10:31 ?407次閱讀
    <b class='flag-5'>萬字</b>長文淺談系統穩定性建設

    商湯大模型開“卷”長文本,支持100萬字處理

    知情者透露,此次升級的日日新大模型還具備跨平臺操作特性,在Web和App端都可以使用。App端更是新增了粵語口語語音對話功能,進一步提升了模型對粵語及香港本土文化的理解。
    的頭像 發表于 05-29 11:43 ?428次閱讀

    MiniMax推出“海螺AI”,支持超長文本處理

    近日,大模型公司MiniMax宣布,其全新產品“海螺AI”已正式上架。這款強大的AI工具支持高達200ktokens的上下文長度,能夠在1秒內處理近3萬字的文本。
    的頭像 發表于 05-17 09:30 ?780次閱讀

    AI初創企業推MoE混合專家模型架構新品abab 6.5

    losoev 6.5s:與 losoev 6.5 共享相同的訓練技術和數據,但效率更高,同樣支持 200k tokens 的上下文長度,且能夠在 1 秒鐘內處理近 3 萬字的文本。
    的頭像 發表于 04-17 15:06 ?532次閱讀

    鴻蒙OS開發實例:【ArkTS類庫異步并發async/await】

    async/await是一種用于處理異步操作的Promise語法糖,使得編寫異步代碼變得更加簡單和易讀。通過使用async關鍵聲明一個函數為異步函數,并使用await關鍵
    的頭像 發表于 04-02 20:57 ?1086次閱讀
    鴻蒙OS開發實例:【ArkTS類庫<b class='flag-5'>異步</b>并發async/await】

    阿里通義千問重磅升級,免費開放1000萬字長文檔處理功能

    近日,阿里巴巴旗下的人工智能應用通義千問迎來重磅升級,宣布向所有人免費開放1000萬字的長文檔處理功能,這一創新舉措使得通義千問成為全球文檔處理容量第一的AI應用。
    的頭像 發表于 03-26 11:09 ?827次閱讀

    鴻蒙原生應用開發-ArkTS語言基礎類庫異步并發簡述async/await

    async/await是一種用于處理異步操作的Promise語法糖,使得編寫異步代碼變得更加簡單和易讀。通過使用async關鍵聲明一個函數為異步函數,并使用await關鍵
    發表于 03-06 14:44

    馬斯克狀告OpenAI,OpenAI回應馬斯克訴訟

    馬斯克在長達46頁、1.4萬字的訴訟文件中,控訴OpenAI背離了其初衷——即致力于開發開源人工通用智能(AGI)并服務全人類。
    的頭像 發表于 03-04 15:33 ?952次閱讀
    主站蜘蛛池模板: 免费被黄网站在观看 | 日韩欧美一区二区三区不卡视频 | 亚洲日本中文字幕天天更新 | 6一10周岁毛片免费 717影院理论午夜伦不卡久久 | 天堂网www在线资源 天堂网www在线资源链接 | 激情综合网五月激情 | 亚洲偷偷| 在线看视频你懂的 | 激情五月激情综合色区 | 色的视频网站 | 久久久婷婷 | 国产拍拍 | 韩国三级中文字幕hd | 护士一级aaaaaa毛片 | 97人洗澡人人澡人人爽 | 4虎影视国产在线观看精品 4虎影院永久地址www | 色老头永久免费网站 | 狼人激情网 | 人人干在线观看 | 免费看一级片 | 男女爱爱爽爽福利免费视频 | 天天干天天插天天射 | 欧美白人极品性喷潮 | 天天爱天天做天天爽天天躁 | 性猛交╳xxx乱大交 性免费视频 | 亚洲精品www | 免费大片黄日本在线观看 | 啪啪免费看 | 男女www视频在线看网站 | 午夜久久影院 | 你懂的在线视频观看 | 成人在线视频网 | 国模无水印一区二区三区 | 妇少香港三日本三级视频 | 天天爽天天操 | 美女国产在线观看免费观看 | 2o18国产大陆天天弄 | 操操操天天操 | 性视频亚洲 | 一级特黄特黄的大片免费 | 网站四虎1515hhcom |