知识卡片

回调反转方向

普通读书笔记卡 · 1539.a

内容

异步回调把 [[主动调用会阻塞]] 的调用方向反过来:调用方预先设置好”完成后要执行的钩子方法”,被调用方执行完反向调用这个钩子,调用线程不再需要阻塞等待。容易被忽视的细节:真正执行回调的线程已不是发起调用的线程,而是异步执行任务的线程——这正是 [[回调线程要识别]] 要强调的。Java 标准实现是 CompletableFuture,Guava、Netty 各自提供了更早的回调 API。

参考来源

- 位置:《Java高并发核心编程.卷2,多线程、锁、JMM、JUC、高并发设计模式》第9章《高并发核心模式之异步回调模式》9.4节《异步回调与主动调用》(源文件:_epub-src/OEBPS/Text/chapter285.xhtml) - 结论依据:原文说明“回调是一种反向的调用模式,也就是说,被调用方在执行完成后,会反向执行‘调用方’所设置的钩子方法”,并指出“在回调模式中负责执行回调方法的具体线程已经不再是调用方的线程(如示例中的泡茶线程),而是变成了异步的被调用方的线程(如烧水线程)”,因此推出本卡结论。 - 原始内容:如何将主动调用的方向进行反转呢?这就是异步回调。回调是一种反向的调用模式,也就是说,被调用方在执行完成后,会反向执行“调用方”所设置的钩子方法……在回调模式中负责执行回调方法的具体线程已经不再是调用方的线程……而是变成了异步的被调用方的线程。