Netty概念之 Future 和 Promise


(一)jdk中future和netty中future的比較

jdk中future:

// 取消異步操作 boolean cancel(boolean mayInterruptIfRunning); // 異步操作是否取消 boolean isCancelled(); // 異步操作是否完成,正常終止、異常、取消都是完成 boolean isDone(); // 阻塞直到取得異步操作結果 V get() throws InterruptedException, ExecutionException; // 同上,但最長阻塞時間為timeout V get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException;

jdk中future的特點:
1.無論結果是成功還是失敗還是取消,返回的都是isdone();
2.而且我們在異步操作觸發和結束的時候比較關心其他的一些操作,在jdk的future中無法進行補充。所以netty對future做了擴展。

netty中future(以下為擴展內容):

// 異步操作完成且正常終止 boolean isSuccess(); // 異步操作是否可以取消 boolean isCancellable(); // 異步操作失敗的原因 Throwable cause(); // 添加一個監聽者,異步操作完成時回調,類比javascript的回調函數 Future<V> addListener(GenericFutureListener<? extends Future<? super V>> listener); Future<V> removeListener(GenericFutureListener<? extends Future<? super V>> listener); // 阻塞直到異步操作完成 Future<V> await() throws InterruptedException; // 同上,但異步操作失敗時拋出異常 Future<V> sync() throws InterruptedException; // 非阻塞地返回異步結果,如果尚未完成返回null V getNow();

netty中future的特點:
1.操作結果分為success,fail,canceled三種;
2.並且通過addlisteners()方法可以添加回調操作,即觸發或者完成時需要進行的操作;
3.await()和sync(),可以以阻塞的方式等待異步完成;getnow()可以獲得異步操作的結果,如果還未完成則返回Null;

 

 

netty中的promise擴展自future,相比之下多了 可寫 的api


Promise<V> setSuccess(V result);


boolean trySuccess(V result);


Promise<V> setFailure(Throwable cause);


boolean tryFailure(Throwable cause);


boolean setUncancellable();

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM