我可以假设 a在异步代码中SettableFuture
充当a 吗Fiber
(应该假设为 a ForkJoinTask
)?
除了线程之外,Quasar SettableFuture 还可以阻塞光纤。
我可以假设 a在异步代码中SettableFuture
充当a 吗Fiber
(应该假设为 a ForkJoinTask
)?
除了线程之外,Quasar SettableFuture 还可以阻塞光纤。
Future不代表正在运行的代码,而是一个值,它可以立即可用或将来可用(因此得名)同时写入持有对它的引用的线程。此外,它可以被等待,同时等待的线程将阻塞:这意味着它也充当线程同步机制。
“可设置的”future 的值不仅可以由实现类在内部生成,还可以从外部线程设置,类似于promise。
Quasar 的SettableFuture具有额外的能力,允许所有类型的 Quasar strands(即目前的常规 Java 线程以及 Quasar 纤程)在值尚不可用时阻止它们等待它。
这意味着您可以SettableFuture
在任何链(线程或光纤)中创建一个,例如在异步回调的代码中引用它,该回调将设置其值(在执行时)但立即返回它以供更多链(线程或光纤)在等待时阻塞它的价值。因此,它是将异步 API 转换为阻塞(通常是高效的光纤阻塞)API 的绝佳工具。这种模式也在这篇博文的“未来”小节中进行了描述。