future promise java_第四章 Future和Promise
Netty是一個(gè)異步網(wǎng)絡(luò)處理框架,在實(shí)現(xiàn)中大量使用了Future機(jī)制,并在Java自帶Future的基礎(chǔ)上,增加了Promise機(jī)制。這兩者的目的都是使異步編程更加方便使用。在閱讀源碼之前,我們需要對(duì)Future的機(jī)制有很清楚的認(rèn)識(shí)。
## 4.1 異步編程模型
### 4.1.1 Future
使用Future機(jī)制時(shí),我們調(diào)用耗時(shí)任務(wù)會(huì)立刻返回一個(gè)Future實(shí)例,使用該實(shí)例能夠以阻塞的方式或者在未來(lái)某刻獲得耗時(shí)任務(wù)的執(zhí)行結(jié)果,還可以添加監(jiān)聽(tīng)事件設(shè)置后續(xù)程序。
```
function Future asynchronousFunction(String arg){
Future future = new Future(new Callable(){
public Object call(){
return null;
}
});
return future;
}
ReturnHandler handler = asynchronousFunction(); // 耗時(shí)函數(shù),但會(huì)立即返回一個(gè)句柄
handler.getResult(); // 通過(guò)句柄可以等待結(jié)果
handler.addListener(); //通過(guò)句柄可以添加完成后執(zhí)行的事件
handler.cancel(); // 通過(guò)句柄取消耗時(shí)任務(wù)
```
### 4.1.2 Promise
在Future機(jī)制中,業(yè)務(wù)邏輯所在任務(wù)執(zhí)行的狀態(tài)(成功或失敗)是在Future中實(shí)現(xiàn)的,而在Promise中,可以在業(yè)務(wù)邏輯控制任務(wù)的執(zhí)行結(jié)果,相比Future,更加靈活。
```
// 異步的耗時(shí)任務(wù)接收一個(gè)promise
function Promise asynchronousFunction(String arg){
Promise promise = new PromiseImpl();
Object result = null;
result = search() //業(yè)務(wù)邏輯,
if(success){
promise.setSuccess(result); // 通知promise當(dāng)前異步任務(wù)成功了,并傳入結(jié)果
}else if(failed){
promise.setFailure(reason); 通知promise當(dāng)前異步任務(wù)失敗了
}else if(error){
promise.setFailure(error); 通知promise當(dāng)前異步任務(wù)發(fā)生了異常
}
}
// 調(diào)用異步的耗時(shí)任務(wù)
Promise promise = asynchronousFunction(promise) ;//會(huì)立即返回promise
//添加成功處理/失敗處理/異常處理等事件
promise.addListener();// 例如,可以添加成功后執(zhí)行的事件
doOtherThings() ; // 繼續(xù)做其他事件,不需要理會(huì)asynchronousFunction何時(shí)結(jié)束
```
在Netty中,Promise繼承了Future,包含了這兩者的功能。
總結(jié)
以上是生活随笔為你收集整理的future promise java_第四章 Future和Promise的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: QT中的MessageBox设置自动关闭
- 下一篇: 《史蒂夫·乔布斯传》(Steve Job