关于future:Future和Promise
第四章 Future和PromiseNetty是一个异步网络解决框架,在实现中大量应用了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,更加灵便。 // 异步的耗时工作接管一个promisefunction 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,蕴含了这两者的性能。 ...