日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

future promise java_第四章 Future和Promise

發布時間:2023/12/10 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 future promise java_第四章 Future和Promise 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Netty是一個異步網絡處理框架,在實現中大量使用了Future機制,并在Java自帶Future的基礎上,增加了Promise機制。這兩者的目的都是使異步編程更加方便使用。在閱讀源碼之前,我們需要對Future的機制有很清楚的認識。

## 4.1 異步編程模型

### 4.1.1 Future

使用Future機制時,我們調用耗時任務會立刻返回一個Future實例,使用該實例能夠以阻塞的方式或者在未來某刻獲得耗時任務的執行結果,還可以添加監聽事件設置后續程序。

```

function Future asynchronousFunction(String arg){

Future future = new Future(new Callable(){

public Object call(){

return null;

}

});

return future;

}

ReturnHandler handler = asynchronousFunction(); // 耗時函數,但會立即返回一個句柄

handler.getResult(); // 通過句柄可以等待結果

handler.addListener(); //通過句柄可以添加完成后執行的事件

handler.cancel(); // 通過句柄取消耗時任務

```

### 4.1.2 Promise

在Future機制中,業務邏輯所在任務執行的狀態(成功或失敗)是在Future中實現的,而在Promise中,可以在業務邏輯控制任務的執行結果,相比Future,更加靈活。

```

// 異步的耗時任務接收一個promise

function Promise asynchronousFunction(String arg){

Promise promise = new PromiseImpl();

Object result = null;

result = search() //業務邏輯,

if(success){

promise.setSuccess(result); // 通知promise當前異步任務成功了,并傳入結果

}else if(failed){

promise.setFailure(reason); 通知promise當前異步任務失敗了

}else if(error){

promise.setFailure(error); 通知promise當前異步任務發生了異常

}

}

// 調用異步的耗時任務

Promise promise = asynchronousFunction(promise) ;//會立即返回promise

//添加成功處理/失敗處理/異常處理等事件

promise.addListener();// 例如,可以添加成功后執行的事件

doOtherThings() ; // 繼續做其他事件,不需要理會asynchronousFunction何時結束

```

在Netty中,Promise繼承了Future,包含了這兩者的功能。

總結

以上是生活随笔為你收集整理的future promise java_第四章 Future和Promise的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。